#include <bits/stdc++.h>   const double eps = 1e-10;   const float epsf = 1e-6;   using namespace std;   inline long long int __gcd(long long int a, long long int b) {     if (a == 0 || b == 0) {       return max(a, b);     }     long long int tempa, tempb;     while (1) {       if (a % b == 0)         return b;       else {         tempa = a;         tempb = b;         a = tempb;         b = tempa % tempb;       }     }   }   inline int compfloat(float& x, float& y) {     if (fabs(x - y) < epsf)       return 0;     else if (x - y > 0)       return 1;     return -1;   }   inline int compdouble(double x, double y) {     if (fabs(x - y) < eps)       return 0;     else if (x - y > 0)       return 1;     else       return -1;   }   bool prime(long long int k) {     for (long long int i = 2; i * i <= k; i++)       if (k % i == 0) {         return false;       }     return true;   }   void pdash(int n = 1) {     for (int i = 0; i < n; i++) {       for (int j = 0; j < 30; j++) {         cout <<  - ;       }       cout <<   n ;     }   }   long long int power(long long int x, long long int y) {     long long int result = 1;     while (y > 0) {       if (y & 1) {         result = (result * x);       }       y = y >> 1;       x = (x * x);     }     return result;   }   long long int power(long long int x, long long int y, long long int z) {     long long int result = 1;     x = x % z;     while (y > 0) {       if (y & 1) {         result = (result * x) % z;       }       y = y >> 1;       x = (x * x) % z;     }     return result;   }   long long int modInverse(long long int n, long long int p) {     return power(n, p - 2, p);   }   long long int nCrF(long long int n, long long int r, long long int p) {     if (r == 0) return 1;     long long int f[n + 1];     f[0] = 1;     for (long long int i = 1; i <= n; i++) f[i] = f[i - 1] * i % p;     return (f[n] * modInverse(f[r], p) % p * modInverse(f[n - r], p) % p) % p;   }   void cordinate_compression(vector<int>& v) {     vector<int> p = v;     sort(p.begin(), p.end());     p.erase(unique(p.begin(), p.end()), p.end());     for (int i = 0; i < (int)((v).size()); i++)       v[i] = (int)(lower_bound(p.begin(), p.end(), v[i]) - p.begin());   }   const int MX = 1400009;   vector<int> used(MX, 0);   vector<int> factor[MX];   vector<int> isprime(MX, 1);   vector<bool> is_used(MX, 0);   inline bool check(int index) {     for (auto& j : factor[index]) {       if (is_used[j]) return 0;     }     for (auto& j : factor[index]) {       is_used[j] = 1;     }     return 1;   }   void solve() {     int n;     cin >> n;     int a[n];     for (int i = 2; i < MX; i++) {       if (isprime[i]) {         for (int j = i; j < MX; j += i) {           factor[j].push_back(i);           isprime[j] = 0;         }       }     }     int curr = 2;     bool bz = 1;     for (int i = 0; i < n; i++) {       cin >> a[i];       if (bz) {         curr = a[i];         while (!check(curr)) curr++;         if (curr != a[i]) {           bz = 0;         }         cout << curr <<    ;         curr = 2;       } else {         while (!check(curr)) curr++;         cout << curr <<    ;       }     }     cout <<   n ;   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     int t = 1;     while (t--) {       solve();     }   }