#include <bits/stdc++.h>
using namespace std;
bool tag[6001];
long long p[6001];
int cnt;
int flag[555];
void get_prime() {
  cnt = 0;
  tag[1] = 1;
  for (int i = 2; i < 4000; i++) {
    if (!tag[i]) p[cnt++] = i;
    for (int j = 0; j < cnt && p[j] * i < 4000; j++) {
      tag[i * p[j]] = 1;
      if (i % p[j] == 0) break;
    }
  }
}
long long a[5555], vis[555], t[5555];
int k;
long long f;
bool ok(int mid) {
  a[1] = 1;
  int i;
  for (int i = 0; i < mid; i++) vis[i] = 1;
  for (i = 2; i <= k + 1; i++) {
    long long mi = 10000000000008LL;
    for (int j = 0; j < mid; j++) {
      if (mi > a[vis[j]] * p[j]) {
        mi = a[vis[j]] * p[j];
      }
    }
    if (mi > f) break;
    a[i] = mi;
    for (int j = 0; j < mid; j++) {
      if (mi == a[vis[j]] * p[j]) vis[j]++;
    }
  }
  if (i > k + 1) {
    int c = 0;
    for (int j = 2; j <= k + 1; j++)
      if (a[j] % p[mid - 1] == 0) c++;
    if (c + c >= k) return true;
    int z = mid - 1;
    while (c + c < k) {
      a[i] = a[vis[z]] * p[z];
      if (a[i] > f) return false;
      vis[z]++;
      c++;
      i++;
    }
    int d = i - k - 2;
    c = 1;
    for (int j = 2; j < i; j++) {
      if (d && a[j] % p[z] != 0) {
        d--;
        continue;
      }
      t[++c] = a[j];
    }
    for (int j = 2; j <= k + 1; j++) a[j] = t[j];
    return true;
  }
  return false;
}
int main() {
  get_prime();
  scanf("%d", &k);
  f = k * k * 2;
  int low = 2, high = 5;
  int ans = 555;
  while (low <= high) {
    int mid = (low + high) >> 1;
    if (ok(mid)) {
      ans = min(ans, mid);
      high = mid - 1;
    } else
      low = mid + 1;
  }
  ok(ans);
  for (int i = 1; i <= k; i++) printf("%I64d ", a[i + 1]);
  return 0;
}
