#include <bits/stdc++.h>
const int base = 2000005;
std::vector<char> prime(base + 1, true);
std::set<int> s;
void update(int x) {
  prime[x] = false;
  if (x * 1ll * x <= base) {
    for (int y = x * x; y <= base; y += x) prime[y] = false;
  }
}
int search(int x) {
  while (!prime[x]) x += 1;
  return x;
}
void factor(int x) {
  for (int j = 2; j <= std::floor(std::sqrt(x)); j++) {
    if (x % j == 0) {
      s.insert(j);
      update(j);
      while (x % j == 0) x /= j;
    }
  }
  if (x != 1) {
    s.insert(x);
    update(x);
  }
}
int main() {
  prime[1] = false;
  int n;
  std::cin >> n;
  std::vector<int> lst(n);
  for (auto& x : lst) std::cin >> x;
  char flag = false;
  for (int i = 0; i < n; i++) {
    if (flag) break;
    int x = lst[i];
    std::vector<int> p;
    for (int j = 2; j <= std::floor(std::sqrt(x)); j++) {
      if (x % j == 0) {
        if (std::count(s.begin(), s.end(), j) == 1) {
          flag = true;
          lst[i] = search(lst[i] + 1);
          update(lst[i]);
          factor(lst[i]);
          if (i + 1 < n) {
            lst[i + 1] = search(1);
            update(lst[i + 1]);
          }
          for (int o = i + 2; o < n; o++) {
            lst[o] = search(lst[o - 1] + 1);
            update(lst[o]);
          }
          break;
        } else {
          p.push_back(j);
          while (x % j == 0) x /= j;
        }
      }
    }
    if (x != 1) {
      if (std::count(s.begin(), s.end(), x) == 1) {
        flag = true;
        lst[i] = search(lst[i] + 1);
        update(lst[i]);
        factor(lst[i]);
        if (i + 1 < n) {
          lst[i + 1] = search(1);
          update(lst[i + 1]);
        }
        for (int o = i + 2; o < n; o++) {
          lst[o] = search(lst[o - 1] + 1);
          update(lst[o]);
        }
        break;
      } else
        p.push_back(x);
    }
    for (int a = 0; a < p.size(); a++) {
      update(p[a]);
      s.insert(p[a]);
    }
  }
  for (int i = 0; i < n; i++) std::cout << lst[i] << ' ';
}
