#ifndef __clang__
#pragma GCC optimize "-O3"
#pragma GCC target "tune=native"
#endif
#ifdef ONLINE_JUDGE
#define NDEBUG 1
#endif
#include <stdio.h>
#include <bits/stdc++.h>

#define FOR(i, n)     for(lli i = 0; i < (lli)(n); ++i)
#define FORU(i, j, k) for(lli i = (j); i <= (lli)(k); ++i)
#define FORD(i, j, k) for(lli i = (j); i >= (lli)(k); --i)

#define SQ(x) ((x)*(x))

#define all(x) begin(x), end(x)
#define rall(x) rbegin(x), rend(x)
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define eb emplace_back

using namespace std;

template<typename... As>
struct tpl : public std::tuple<As...> {
  using std::tuple<As...>::tuple;
  tpl(){}
  tpl(std::tuple<As...> const& b) { std::tuple<As...>::operator=(b); }

  template<typename T = tuple<As...> >
  typename tuple_element<0, T>::type const&
  x() const { return get<0>(*this); }
  template<typename T = tuple<As...> >
  typename tuple_element<0, T>::type&
  x() { return get<0>(*this); }

  template<typename T = tuple<As...> >
  typename tuple_element<1, T>::type const&
  y() const { return get<1>(*this); }
  template<typename T = tuple<As...> >
  typename tuple_element<1, T>::type&
  y() { return get<1>(*this); }

  template<typename T = tuple<As...> >
  typename tuple_element<2, T>::type const&
  z() const { return get<2>(*this); }
  template<typename T = tuple<As...> >
  typename tuple_element<2, T>::type&
  z() { return get<2>(*this); }

  template<typename T = tuple<As...> >
  typename tuple_element<3, T>::type const&
  w() const { return get<3>(*this); }
  template<typename T = tuple<As...> >
  typename tuple_element<3, T>::type&
  w() { return get<3>(*this); }
};

using lli   = long long int;
using llu   = long long unsigned;

using pii   = tpl<lli, lli>;
using piii  = tpl<lli, lli, lli>;
using piiii = tpl<lli, lli, lli, lli>;
using vi    = vector<lli>;
using vii   = vector<pii>;
using viii  = vector<piii>;
using vvi   = vector<vi>;
using vvii  = vector<vii>;
using vviii = vector<viii>;

template<class T>
using min_queue = priority_queue<T, vector<T>, greater<T> >;
template<class T>
using max_queue = priority_queue<T>;

template<size_t... I>
struct my_index_sequence {
  using type = my_index_sequence;
  static constexpr array<size_t, sizeof...(I)> value = { {I...} };
};

namespace my_index_sequence_detail {
  template<typename I, typename J> struct concat;
  template<size_t... I, size_t... J>
  struct concat<my_index_sequence<I...>, my_index_sequence<J...> > :
    my_index_sequence<I..., (sizeof...(I)+J)...> { };
  template<size_t N> struct make_index_sequence :
    concat<typename make_index_sequence<N/2>::type, typename make_index_sequence<N-N/2>::type>::type { };
  template <> struct make_index_sequence<0> : my_index_sequence<>{};
  template <> struct make_index_sequence<1> : my_index_sequence<0>{};
}

template<class... A>
using my_index_sequence_for = typename my_index_sequence_detail::make_index_sequence<sizeof...(A)>::type;

template<class T, size_t... I>
void print_tuple(ostream& s, T const& a, my_index_sequence<I...>){
  using swallow = int[];
  (void)swallow{0, (void(s << (I == 0? "" : ", ") << get<I>(a)), 0)...};
}

template<class T>
ostream& print_collection(ostream& s, T const& a);
template<class... A>
ostream& operator<<(ostream& s, tpl<A...> const& a);
template<class... A>
ostream& operator<<(ostream& s, tuple<A...> const& a);
template<class A, class B>
ostream& operator<<(ostream& s, pair<A, B> const& a);

template<class T, size_t I>
ostream& operator<<(ostream& s, array<T, I> const& a) { return print_collection(s, a); }
template<class T>
ostream& operator<<(ostream& s, vector<T> const& a) { return print_collection(s, a); }
template<class T, class U>
ostream& operator<<(ostream& s, multimap<T, U> const& a) { return print_collection(s, a); }
template<class T>
ostream& operator<<(ostream& s, multiset<T> const& a) { return print_collection(s, a); }
template<class T, class U>
ostream& operator<<(ostream& s, map<T, U> const& a) { return print_collection(s, a); }
template<class T>
ostream& operator<<(ostream& s, set<T> const& a) { return print_collection(s, a); }

template<class T>
ostream& print_collection(ostream& s, T const& a){
  s << '[';
  for(auto it = begin(a); it != end(a); ++it){
    s << *it;
    if(it != prev(end(a))) s << " ";
  }
  return s << ']';
}

template<class... A>
ostream& operator<<(ostream& s, tpl<A...> const& a){
  s << '(';
  print_tuple(s, a, my_index_sequence_for<A...>{});
  return s << ')';
}

template<class... A>
ostream& operator<<(ostream& s, tuple<A...> const& a){
  s << '(';
  print_tuple(s, a, my_index_sequence_for<A...>{});
  return s << ')';
}

template<class A, class B>
ostream& operator<<(ostream& s, pair<A, B> const& a){
  return s << "(" << get<0>(a) << ", " << get<1>(a) << ")";
}

//------------------------------------------------------------------------------

int main(){
  ios::sync_with_stdio(0); cin.tie(0);
  lli n; cin>>n;
  if(n==3) {
    cout << "2 5 63" << endl;
    return 0;
  }
  if(n==4) {
    cout << "2 5 20 63" << endl;
    return 0;
  }
  set<lli> S;
  deque<lli> Q[6];
  FORU(i,1,30000) {
    if(i%6==0) Q[0].pb(i);
    else if(i%4==0) Q[4].pb(i);
    else if(i%2==0) Q[2].pb(i);
    else if(i%3==0) Q[3].pb(i);
  }
  auto f = [&](int i) {
    if(i==2){
      if(Q[2].size()>=1&&Q[4].size()>=1&&n>=2) {
        S.insert(Q[2].front());
        S.insert(Q[4].front());
        n-=2;
        Q[2].pop_front();
        Q[4].pop_front();
        return 1;
      }
      return 0;
    }
    int j = 6/i;
    i %= 6;
    if((lli)Q[i].size() >= j && n>=j) {
      FOR(jj,j) {
        S.insert(Q[i].front());
        n -= 1;
        Q[i].pop_front();
      }
      return 1;
    }
    return 0;
  };
  f(2);
  f(3);
  while(f(2)){}
  while(f(3)){}
  while(f(6)){}
  for(lli x : S) cout << x << ' ';
  cout << endl;

  // cout << n << " " << s << endl;
  // map<lli,vector<tpl<lli,lli,lli>>> M;
  // map<lli,vector<tpl<lli,lli,lli>>> M2;
  // map<lli,vector<tpl<lli,lli>>> M3;
  // map<lli,vector<tpl<lli,lli,lli,lli>>> M4;
  // FORU(a,1,K) {
  //   FORU(b,1,K) FORU(c,1,K) if(a<b&&b<c && __gcd(a,b+c)!=1 && __gcd(b,a+c)!=1 && __gcd(c,a+b)!=1) {
  //     if(__gcd(a,__gcd(b,c))==1) M[a+b+c].pb(mt(a,b,c));
  //     else M2[a+b+c].pb(mt(a,b,c));
  //   }
  // }
  // FORU(a,1,K) {
  //   FORU(b,1,K) if(a<b && __gcd(a,b)!=1) {
  //     M3[a+b].pb(mt(a,b));
  //   }
  // }
  // FORU(a,1,K) {
  //   FORU(b,1,K) FORU(c,1,K) {
  //     if(a+b+c<K) {
  //       lli d = K-a-b-c;
  //       if(a<b&&b<c&&c<d && __gcd(a,b+c+d)!=1 && __gcd(b,a+c+d)!=1 && __gcd(c,a+b+d)!=1 && __gcd(d,a+b+c)!=1) {
  //         M4[a+b+c+d].pb(mt(a,b,c,d));
  //       }
  //     }
  //   }
  // }

  // for(auto p : M){
  //   cout << p.first << " " << p.second.size() << endl;
  // }

  // lli n; cin>>n;

  // set<lli> S;
  // auto test4 = [&](lli x, lli y, lli z, lli w) {
  //   FORU(i,1,30000) {
  //     lli a = i*x, b=i*y, c=i*z, d=i*w;
  //     if(max(a,max(b,max(c,d)))>30000) break;
  //     if(n<4) break;
  //     if(S.count(a)||S.count(b)||S.count(c)||S.count(d)) continue;
  //     n-=4;
  //     S.insert(a);
  //     S.insert(b);
  //     S.insert(c);
  //     S.insert(d);
  //   }
  // };

  // auto test3 = [&](lli x, lli y, lli z) {
  //   FORU(i,1,30000) {
  //     lli a = i*x, b=i*y, c=i*z;
  //     if(max(a,max(b,c))>30000) break;
  //     if(n<3) break;
  //     if(S.count(a)||S.count(b)||S.count(c)) continue;
  //     n-=3;
  //     S.insert(a);
  //     S.insert(b);
  //     S.insert(c);
  //   }
  // };
  // auto test2 = [&](lli x, lli y) {
  //   FORU(i,1,30000) {
  //     lli a = i*x, b=i*y;
  //     if(max(a,b)>30000) break;
  //     if(n<2) break;
  //     if(S.count(a)||S.count(b)) continue;
  //     n-=2;
  //     S.insert(a);
  //     S.insert(b);
  //   }
  // };

  // for(auto p : M[K]) {
  //   lli x,y,z; tie(x,y,z)=p;
  //   test3(x,y,z);
  // }
  // for(auto p : M4[K]) {
  //   lli x,y,z,w; tie(x,y,z,w)=p;
  //   test4(x,y,z,w);
  // }
  // for(auto p : M2[K]) {
  //   lli x,y,z; tie(x,y,z)=p;
  //   test3(x,y,z);
  // }
  // for(auto p : M3[K]) {
  //   lli x,y; tie(x,y)=p;
  //   test2(x,y);
  // }
  // cout << S.size() << endl;

  return 0;
}


Measured memory_bytes: 1280