#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100 * 1000 + 10, INF = INT_MAX, MOD = 1e9 + 7;
bool mark[MAXN];
vector<long long> p;
int cnt[MAXN];
int main() {
  ios::sync_with_stdio(false);
  int k;
  cin >> k;
  for (int i = 2; i < 2 * k; i++)
    if (!mark[i]) {
      for (int j = i + i; j < k; j += i) mark[j] = true;
      p.push_back(i);
    }
  set<long long> ans;
  int i = 0;
  while (((int)ans.size()) < k) {
    vector<long long> t;
    ans.insert(p[i]);
    for (__typeof((ans).begin()) j = (ans).begin(); j != (ans).end(); j++) {
      long long cur = *j;
      while (cur * p[i] <= 2 * ((k) * (k))) {
        cur *= p[i];
        t.push_back(cur);
      }
    }
    for (__typeof((t).begin()) j = (t).begin(); j != (t).end(); j++)
      ans.insert(*j);
    i++;
  }
  int j = 0;
  set<int> v;
  for (__typeof((ans).begin()) g = (ans).begin(); g != (ans).end(); g++) {
    if (j == k) break;
    v.insert(*g);
    for (int l = 0; l < i; l++)
      if (*g % p[l] == 0) cnt[l]++;
    j++;
  }
  for (j = 0; j < i; j++)
    if (cnt[j] < k / 2) {
      vector<int> rep;
      for (__typeof((v).begin()) g = (v).begin(); g != (v).end(); g++) {
        int cur = *g * p[j];
        if (cur < 2 * ((k) * (k)) && v.find(cur) == v.end()) rep.push_back(*g);
      }
      for (__typeof((rep).begin()) g = (rep).begin(); g != (rep).end(); g++) {
        v.erase(*g);
        v.insert(*g * p[j]);
      }
    }
  for (__typeof((v).begin()) g = (v).begin(); g != (v).end(); g++)
    cout << *g << ' ';
  cout << endl;
  return 0;
}
