#include <bits/stdc++.h>
using namespace std;
long long int n, up;
bool primes[200];
vector<long long int> pr;
vector<long long int> ans;
bool BuildAll(long long int k, long long int primes_number) {
  long long int limit = 2 * k * k;
  ans.clear();
  vector<long long int> cur(primes_number, 1);
  long long int cur_value = 1;
  while (true) {
    ans.push_back(cur_value);
    long long int remain = 1;
    int j = -1;
    for (int i = primes_number - 1; i >= 0; i--) {
      if (cur_value * pr[i] / remain <= limit) {
        j = i;
        break;
      } else
        remain *= cur[i];
    }
    if (j == -1) break;
    cur_value *= pr[j];
    cur_value /= remain;
    cur[j] *= pr[j];
    for (int i = j + 1; i < primes_number; i++) {
      cur[i] = 1;
    }
  }
  if (ans.size() < k) return false;
  vector<long long int> q(primes_number, 0);
  vector<long long int> ans2;
  vector<bool> flag(ans.size(), true);
  for (int i = primes_number - 1; i >= 0; i--) {
    for (int j = 0; j < ans.size(); j++) {
      if (flag[j] && (ans[j] % pr[i] == 0)) {
        ans2.push_back(ans[j]);
        flag[j] = false;
        for (int z = 0; z < primes_number; z++) {
          if (ans[j] % pr[z] == 0) q[z]++;
        }
        if (q[i] >= k / 2) break;
        if (ans2.size() == k) break;
      }
    }
  }
  if (ans2.size() < k) {
    for (int i = 0; i < ans.size(); i++) {
      if (flag[i]) {
        ans2.push_back(ans[i]);
      }
      if (ans2.size() == k) break;
    }
  }
  ans = ans2;
  return true;
}
int main() {
  cin >> n;
  for (int i = 0; i < 200; i++) primes[i] = true;
  primes[0] = primes[1] = false;
  for (int i = 2; i * i < 200; i++) {
    if (primes[i]) {
      for (int j = i * i; j < 200; j += i) primes[j] = false;
    }
  }
  for (int i = 2; i < 200; i++) {
    if (primes[i]) pr.push_back(i);
  }
  for (int i = 1; i <= 10; i++) {
    if (BuildAll(n, i)) {
      for (int j = 0; j < n; j++) {
        cout << ans[j] << " ";
      }
      cout << endl;
      return 0;
    }
  }
  return 0;
}
