#include <bits/stdc++.h>
const int dx[] = {1, 0, -1, 0};
const int dy[] = {0, 1, 0, -1};
using namespace std;
int prime[15] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47};
set<int> solve(int limit, int k) {
  set<int> ret;
  for (int s = (1 << limit) - 1; s > 0; s--) {
    int p = 1;
    bool ng = false;
    for (int i = 0; i < 15; i++) {
      if ((s >> i) & 1) {
        p *= prime[i];
        if (p > 2 * k * k) {
          ng = true;
          break;
        }
      }
    }
    if (ng) continue;
    queue<int> que;
    que.push(p);
    while (!que.empty() && ret.size() < k) {
      int now = que.front();
      que.pop();
      ret.insert(now);
      for (int i = 0; i < 15; i++) {
        if ((s >> i) & 1) {
          int next = now * prime[i];
          if (next <= 2 * k * k) que.push(next);
        }
      }
    }
    if (ret.size() == k) return ret;
  }
  return ret;
}
int cnt[15];
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  int k;
  cin >> k;
  for (int i = 1; i < 15; i++) {
    set<int> S = solve(i, k);
    if (S.size() < k) continue;
    memset(cnt, 0, sizeof(cnt));
    for (int el : S) {
      for (int i = 0; i < 15; i++)
        if (el % prime[i] == 0) cnt[i]++;
    }
    bool ng = false;
    for (int i = 0; i < 15; i++) {
      if (cnt[i] != 0 && 2 * cnt[i] < k) ng = true;
    }
    if (ng) continue;
    for (int el : S) {
      cout << el << " ";
    }
    cout << endl;
    break;
  }
  return 0;
}
