#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 11000000;
long long Max, Cnt[MAXN], Lp[MAXN], P[MAXN], n;
inline long long Read() {
  long long Ret = 0;
  char ch;
  do {
    ch = getchar();
  } while (ch > '9' || ch < '0');
  while (ch >= '0' && ch <= '9') {
    Ret = Ret * 10 + ch - '0';
    ch = getchar();
  }
  return Ret;
}
bool Check(long long a) {
  for (int i = 1; P[i] <= Max && P[i]; ++i) {
    long long s = P[i], Ret = 0;
    for (; s <= a; s *= P[i]) Ret = Ret + a / s;
    if (Ret < Cnt[i]) return 0;
  }
  return 1;
}
int main() {
  n = Read();
  for (int i = 1; i <= n; ++i) {
    long long Val;
    Val = Read();
    Max = max(Max, Val);
    ++Cnt[Val];
  }
  for (long long i = 2; i <= Max; ++i) {
    if (!Lp[i]) {
      Lp[i] = i;
      P[++P[0]] = i;
    }
    for (int j = 1; j <= P[0] && P[j] <= Lp[i] && (long long)i * P[j] <= Max;
         ++j)
      Lp[i * P[j]] = P[j];
  }
  for (long long i = Max; i >= 2; --i) Cnt[i] += Cnt[i + 1];
  for (long long i = Max; i >= 2; --i) {
    if (i != Lp[i]) Cnt[Lp[i]] += Cnt[i];
    Cnt[i / Lp[i]] += Cnt[i];
  }
  for (long long i = 1; i <= P[0]; ++i) Cnt[i] = Cnt[P[i]];
  long long L = 1, R = 10000000000000LL;
  while (L < R) {
    long long Mid = (L + R) >> 1;
    if (Check(Mid))
      R = Mid;
    else
      L = Mid + 1;
  }
  cout << R;
  return 0;
}
