#include <bits/stdc++.h>
using namespace std;
const int K = 5000;
const int N = 2 * K * K + 13;
int mcnt = 0;
int num = 0;
int sz = 0;
bool pr[N];
bool find(vector<int> &a, int x) {
  for (int i = 0; i < (int)a.size(); i++)
    if (a[i] == x) return true;
  return false;
}
int nextp(int p) {
  for (int i = p + 1; i < N; i++) {
    if (!pr[i]) return i;
  }
  throw;
}
vector<int> p;
vector<int> solve(int n) {
  vector<int> a;
  a.push_back(1);
  int p = 2;
  ::p.clear();
  for (;; p = nextp(p)) {
    int i = 0;
    while (i < (int)a.size()) {
      if (a[i] * p <= 2 * n * n) a.push_back(a[i] * p);
      i++;
    }
    ::p.push_back(p);
    if ((int)a.size() >= n + 1) break;
  }
  return a;
}
bool check(vector<int> a, int n) {
  vector<int> cnt((int)p.size());
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < (int)p.size(); j++) {
      if (a[i] % p[j] == 0) cnt[j]++;
    }
  }
  for (int i = 0; i < (int)p.size(); i++)
    if (cnt[i] < n / 2) return false;
  return true;
}
void answ(vector<int> ans, int i) {
  while (!check(ans, i)) {
    random_shuffle(ans.begin(), ans.end());
  }
  for (int j = 0; j < i; j++) cout << ans[j] << " ";
}
bool solve() {
  int n;
  if (scanf("%d", &n) != 1) return false;
  vector<int> ans = solve(n);
  reverse(ans.begin(), ans.end());
  ans.pop_back();
  answ(ans, n);
  return false;
}
int main() {
  srand(time(NULL));
  for (int i = 2; i * i < K * 100; i++) {
    if (pr[i]) continue;
    for (int j = i + i; j < N; j += i) {
      pr[j] = true;
    }
  }
  cerr << "TIME: " << clock() << endl;
  while (solve()) puts("");
  cerr << "TIME: " << clock() << endl;
}
