#include <bits/stdc++.h>
int prime[10000010], vis[10000010], num;
using namespace std;
vector<int> myvecPub;
bool flag = false;
bool isPrime(int num) {
  if (num <= 1)
    return false;
  else if (num == 2)
    return true;
  else if (num % 2 == 0)
    return false;
  else {
    bool prime = true;
    int divisor = 3;
    double num_d = static_cast<double>(num);
    int upperLimit = static_cast<int>(sqrt(num_d) + 1);
    while (divisor <= upperLimit) {
      if (num % divisor == 0) prime = false;
      divisor += 2;
    }
    return prime;
  }
}
int binarySearch(int array[], int size, int searchValue) {
  int low = 0;
  int high = size - 1;
  int mid;
  while (low <= high) {
    mid = (low + high) / 2;
    if (searchValue == array[mid]) {
      return mid;
    } else if (searchValue > array[mid]) {
      low = mid + 1;
    } else {
      high = mid - 1;
    }
  }
  return -1;
}
int fib(int x) {
  if (x < 2) {
    return x;
  }
  return fib(x - 1) + fib(x - 2);
}
void fibb(int n) {
  int previous = 1;
  int current = 1;
  int next = 1;
  for (int i = 3; i <= n; ++i) {
    if (next > n) break;
    next = current + previous;
    previous = current;
    current = next;
  }
}
unsigned long long intoLL(int arrr[], int size) {
  unsigned long long q = 0;
  for (int j = 0; j < size; j++) {
    if (j == 0) {
      q += arrr[j];
    } else {
      q *= 10;
      q += arrr[j];
    }
  }
  cout << q << " inverted number " << endl;
  return q;
}
int fromVector(vector<bool> vec) {
  int retval = 0;
  int i = 0;
  for (vector<bool>::iterator it = vec.begin(); it != vec.end(); it++, i++) {
    if (*it) {
      retval |= 1 << i;
    }
  }
  return retval;
}
int factorial(int fac) {
  if (fac == 0) {
    return 1;
    flag = true;
  }
  if (flag == false) {
    myvecPub.push_back(fac);
  }
  return fac * factorial(fac - 1);
}
bool rec(int sum, int siz, int num) {
  cout << num << " 2 " << endl;
  if (siz >= 3) {
    return sum == 15;
  }
  cout << num << endl;
  return (rec(sum + 6, ++siz, 6) || rec(sum + 5, ++siz, 5) ||
          rec(sum + 4, ++siz, 4) || rec(sum + 3, ++siz, 3) ||
          rec(sum + 2, ++siz, 2));
}
bool er(int num) {
  int i = 2;
  while (true) {
    if (num % (i * i) == 0) {
      return false;
    }
    if (i * i >= num) break;
    i++;
  }
  return true;
}
void init() {
  memset(vis, 1, sizeof(vis));
  num = 0;
  for (int i = 2; i < 10000000; i++) {
    if (vis[i]) {
      prime[num++] = i;
      for (int j = 2; j * i < 10000000; j++) vis[j * i] = 0;
    }
  }
}
int main() {
  cin.tie(0);
  std ::ios ::sync_with_stdio(false);
  int x;
  init();
  cin >> x;
  for (int i = 1; i <= x; i++) {
    cout << prime[i] << " ";
  }
  return 0;
}
