#include <bits/stdc++.h>
#define FOR(i, begin, end) for(int i=(begin);i<(end);i++)
#define IFOR(i, begin, end) for(int i=(end)-1;i>=(begin);i--)
#define rep(i, n) FOR(i,0,n)
#define irep(i, n) IFOR(i,0,n)
#define all(v) begin(v), end(v)
using namespace std;
using ll = long long;
using ull = unsigned long long;
using P = pair<int, int>;
using PLL = pair<ll, ll>;
using VI = vector<int>;
using VLL = vector<ll>;
using VB = vector<bool>;
using VP = vector<P>;
using Graph2 = vector<vector<int>>;
using PQ = priority_queue<int>;
template<typename T>istream& operator>>(istream&s,vector<T>&v){for(auto &i: v)s>>i;return s;}
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }
bool second_compare(P a,P b){if(a.second!=b.second){return a.second<b.second;} else return true;}

int main() {
    int n;
    cin >> n;
    VI ans(n);
    ans[0] = 2*3;
    ans[1] = 2*5;
    ans[2] = 3*5;
    int idx = 3;
    for (int i = 16; ; i++) {
        if (idx >= n) break;
        // 倍数なら追加
        if (i % (2*3) == 0 || i % (2*5) == 0 || i % (3*5) == 0) {
            ans[idx] = i;
            idx++;
        }
    }
    for (auto e: ans) {
        cout << e << ' ';
    }
    cout << endl;
    return 0;
}
#include <bits/stdc++.h>

using namespace std;
long long n, sum;
int main()
{
    cin >> n;
    for (long long i=1000, ert=0; ; i*=1000, ert++) {
        sum+=(min(n, i-1)-i/1000+1)*ert;
        if (n<i) {
            cout << sum << "\n";
            return 0;
        }
    }
    return 0;
}
