#include <bits/stdc++.h>
using namespace std;
int _;
const int MAXN = 10 * 1000 * 1000;
const int MAXK = 1000 * 1000;
int k;
bool prime[MAXN + 1];
int mpd[MAXN + 1];
int a[MAXK + 1];
int sum[MAXN + 1];
long long cnt[MAXN + 1];
long long Num(long long n, long long p) {
  long long ans = 0;
  while (n) {
    n /= p;
    ans += n;
  }
  return ans;
}
int main() {
  for (int i = 2; i <= MAXN; ++i) prime[i] = true;
  for (int i = 2; i * i <= MAXN; ++i) {
    if (prime[i]) {
      for (int j = i * i; j <= MAXN; j += i) {
        if (prime[j]) {
          prime[j] = false;
          mpd[j] = i;
        }
      }
    }
  }
  for (int i = 2; i <= MAXN; ++i)
    if (mpd[i] == 0) mpd[i] = i;
  _ = scanf("%d", &k);
  for (__typeof(k) i = (0); i < (k); ++i) {
    _ = scanf("%d", &a[i]);
    sum[a[i]]++;
  }
  for (int i = MAXN - 1; i >= 2; --i) sum[i] += sum[i + 1];
  for (int i = 2; i <= MAXN; ++i) {
    if (!sum[i]) break;
    int x = i;
    while (x > 1) {
      cnt[mpd[x]] += sum[i];
      x /= mpd[x];
    }
  }
  long long ans = 1;
  for (int i = 2; i <= MAXN; ++i) {
    if (!cnt[i]) continue;
    long long l = 1, r = (long long)MAXN * MAXK;
    while (l != r) {
      long long m = (l + r) / 2;
      if (Num(m, i) >= cnt[i])
        r = m;
      else
        l = m + 1;
    }
    ans = max(ans, l);
  }
  cout << ans << endl;
  return 0;
}
