#include<bits/stdc++.h>
using namespace std;
const int N=10010;
vector<int> a;
int n;
void inc(int num){
int temp=num;
while (temp > 0) {
/*不使用临时变量 temp 会出现的问题
假设不使用临时变量 temp,在循环里直接操作 num,
当发现 num 中存在满足条件的数字并将其添加到向量 a 时,
num 已经因为之前的整除运算而发生了改变,不再是原始的输入值。
例如,若 num 是 23,在检查到第一位数字 2 时,
本应将 23 添加到向量 a 中,
但由于之前已经进行了 num = num / 10 操作,
此时 num 已经变为 2,添加到向量 a 中的就会是 2 而不是 23,
这显然不符合我们的预期。*/
int digit = temp % 10;
if (digit == 2||digit==0||digit==1||digit==9) {
a.push_back(num);
break;
}
temp=temp/10;
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
inc(i);
}
int ans=0;
for(int i=0;i<a.size();i++){
ans=ans+a[i];
}
cout<<ans;
return 0;
}