#include <algorithm>
#include <iostream>
#include <vector>
int main() {
using namespace std;
int n;
cin >> n;
int maxv = 0;
auto arr = new int[n];
for(int i = 0; i < n; i++)
{
cin >> arr[i];
maxv = max(maxv, arr[i]);
}
vector<bool> isprime(maxv + 1, true);
vector<int> primes;
auto mfactor = new int[maxv + 1];
for(int i = 2; i <= maxv; i++)
if(isprime[i])
{
primes.push_back(i);
mfactor[i] = i;
for(int j = i * 2; j <= maxv; j += i)
{
isprime[j] = false;
mfactor[j] = i;
}
}
vector<bool> has_pf(maxv + 1, false);
auto check = [&] (const int num) {
int tmp = num;
for(auto i : primes)
{
if(i * i > num)
break;
if(tmp % i)
continue;
if(has_pf[i])
return false;
while(tmp % i == 0)
tmp /= i;
has_pf[i] = true;
}
while(num >= has_pf.size())
has_pf.push_back(false);
if(has_pf[tmp])
return false;
has_pf[tmp] = true;
if(tmp == num)
primes.push_back(num);
return true;
};
int neq = 0;
int last = 0;
for(int i = 0; i < n; i++)
{
if(!neq)
{
int tmp = arr[i];
while(tmp != 1)
{
if(has_pf[mfactor[tmp]])
{
neq = 1;
break;
}
has_pf[mfactor[tmp]] = true;
int tgt = mfactor[tmp];
while(tmp != 1 && mfactor[tmp] == tgt)
tmp /= mfactor[tmp];
}
if(!neq)
cout << arr[i] << ' ';
last = arr[i];
}
if(neq)
{
int now = last + 1;
while(!check(now))
++now;
cout << now << ' ';
if(neq == 1)
last = 1;
else
last = now;
++neq;
}
}
delete[] mfactor;
delete[] arr;
return 0;
}