#include <bits/stdc++.h>
using namespace std;
const int MAXINT = 1111 * 1111 * 1111;
const long long MAXLINT = MAXINT * 1ll * MAXINT;
const long double EPS = 1e-10;
int n, k;
map<int, int> cnt;
vector<int> pr;
vector<int> ans;
void dfs(int p, int x = 0, bool f = true) {
  if (x >= (int)pr.size()) return;
  if (p > 2 * n * n) return;
  if (k >= n) return;
  if (f) {
    ans.push_back(p);
    k++;
    int xx = p;
    for (int i = 2; i * i <= xx; i++)
      if (!(xx % i)) {
        cnt[i]++;
        while (!(xx % i)) xx /= i;
      }
  }
  dfs(p * pr[x], x, true);
  dfs(p, x + 1, false);
}
bool cmp(int a, int b) {
  for (int i = 2; i * i <= a; i++)
    if (!(a % i)) a = i;
  for (int i = 2; i * i <= b; i++)
    if (!(b % i)) b = i;
  return (a < b);
}
int main() {
  scanf("%d", &n);
  for (int i = 2; k < n; i++) {
    bool f = true;
    for (int j = 2; j * j <= i; j++)
      if (!(i % j)) {
        f = false;
        break;
      }
    if (!f) continue;
    pr.push_back(i);
    for (int j = k; n - k < (n + 1) >> 1 && j--;) {
      int x = ans[j];
      f = true;
      for (int l = 2; l * l <= x; l++)
        if (!(x % l)) {
          while (!(x % l)) x /= l;
        }
      if (!f) continue;
      x = ans[j];
      ans.erase(ans.begin() + j);
      for (int l = 2; l * l <= x; l++)
        if (!(x % l)) {
          cnt[l]--;
          while (!(x % l)) x /= l;
        }
      if (x != 1) cnt[x]--;
      k--;
    }
    dfs(i);
    sort(ans.begin(), ans.end(), cmp);
  }
  for (int i = 0; i < n; i++) cout << ans[i] << " ";
  return 0;
}
