#include <bits/stdc++.h>
using namespace std;
const int N = 2e4 + 10;
bool not_prime[N], mark[2 * 5001 * 5000];
vector<int> pr, ne;
set<int> ans;
int main() {
  int k;
  cin >> k;
  for (int i = 2; i < N; i++) {
    if (!not_prime[i]) {
      pr.push_back(i);
      for (int j = 2 * i; j < N; j += i) not_prime[j] = true;
    }
  }
  int sz = 0, i = 0;
  mark[1] = true;
  ans.insert(1);
  while (sz < k) {
    long long p = pr[i];
    ne.clear();
    int cnt = 0;
    while (p <= 2 * k * k) {
      for (auto u : ans)
        if (1LL * u * p <= 2 * k * k)
          if (!mark[u * p]) {
            ne.push_back(u * p);
            mark[u * p] = true;
            cnt++;
          }
      p *= pr[i];
    }
    if (sz + cnt >= k && cnt < (k + 1) / 2) {
      for (int i = 0; i < sz + cnt - k; i++) ans.erase(ans.begin());
    }
    i++;
    for (auto u : ne) ans.insert(u), sz++;
  }
  while (k--) {
    cout << *ans.rbegin() << ' ';
    auto it = ans.end();
    it--;
    ans.erase(it);
  }
  cout << endl;
}
