// Problem: C - Coprime Set
// Contest: AtCoder - AtCoder Regular Contest 118
// URL: https://atcoder.jp/contests/arc118/tasks/arc118_c
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using namespace std;
typedef long long ll;
#define speed ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define mp make_pair
#define pb push_back
#define ff first
#define ss second
#define vi vector<int>
#define vll vector<ll> 
#define all(x) (x).begin() , (x).end()

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
#define rnd(x, y) uniform_int_distribution<ll>(x, y)(rng)

void dbg(){
	cerr << endl;
}
template<typename Head , typename... Tail>
void dbg(Head h , Tail... t){
	cerr << h << " ";
	dbg(t...);
}

#ifdef EMBI_DEBUG
#define debug(...) cerr << "(" << #__VA_ARGS__  << "): ", dbg(__VA_ARGS__)
#else 
#define debug(...)
#endif

const int max_n = 1e5 + 9;
const int mod = 1e9 + 7;
const int inf = 1e9;

typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> indexed_set;
ll power(ll a , ll b)
{
    ll prod = 1;
    while(b)
    {
        if(b&1)
        prod = (prod*a)%mod;
        a = (a*a)%mod;
        b >>= 1;
    }
    return prod;
}
void solve(){
	int n;
	cin >> n;

	int idx = 1;
	set<int> st;
	vector<int> v1{6 , 10 , 15};
	int index = 0;
	for(int i = 1 ; i < n-1 ; i++) {
		while(st.count(idx*v1[index])) {
			idx++;
		}
		if(idx * v1[index] > 10000) {
			if(index == 2) {
				debug(index , i);
				break;
			}
			index++;
			idx = 2;
			i--;
			continue;
		}
		st.insert(idx * v1[index]);
	}
	debug("hi");
	
	assert(st.size() == n-2);
	
	vector<int> v;
	v.pb(10);
	for(auto it : st) {
		v.pb(it);
	} 
	v.pb(15);
	
	for(int i = 0 ; i < n ; i++) {
		for(int j = i+1 ; j < n ; j++) {
			assert(__gcd(v[i] , v[j]) > 1);
		}
	}
	
	int hcf = 0;
	for(int i = 0 ; i < n ; i++) 
		hcf = __gcd(hcf , v[i]);
		
	assert(hcf == 1);
	
	assert(!st.count(10));
	assert(!st.count(15));
	
	for(auto it : v) {
		cout << it << " ";
	}
	
}
signed main(){
	int t = 1;
	// cin >> t;
	for(int i = 1 ; i <= t ; i++){
		solve();
	}
}

#include<cstdio>
#include<vector>
#include<algorithm>
#include<set>
#include<unordered_map>
#include<string>
#include<iostream>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
using ll = long long;
constexpr int N = 1e4 + 5;
constexpr int M = 2505;

int n;
bool vis[N];

int main() {
    scanf("%d", &n);
    printf("%d %d %d ", 6, 10, 15);
	vis[6] = vis[10] = vis[15] = 1;
	int cnt = 4;
	
	for(int i = 6; i <= 10000 && cnt <= n; i += 6) {
		if(!vis[i]) {
			++cnt;
			vis[i] = 1;
			printf("%d ", i);
		}
	}
	
	for(int i = 10; i <= 10000 && cnt <= n; i += 10) {
		if(!vis[i]) {
			++cnt;
			vis[i] = 1;
			printf("%d ", i);
		}
	}
	
	for(int i = 15; i <= 10000 && cnt <= n; i += 15) {
		if(!vis[i]) {
			++cnt;
			vis[i] = 1;
			printf("%d ", i);
		}
	}
	
    return 0;
}