#include <bits/stdc++.h>
using namespace std;
const int maxn = 10000010;
int pre[maxn], n, Max;
vector<int> v;
long long num[maxn];
void initial() {
  Max = -1;
  v.clear();
  memset(num, 0, sizeof(num));
  memset(pre, -1, sizeof(pre));
}
void input() {
  int x;
  for (int i = 0; i < n; i++) {
    scanf("%d", &x);
    Max = max(x, Max);
    num[x]++;
  }
}
bool judge(long long op) {
  for (int i = 0; i < v.size(); i++) {
    long long cnt = 0, tp = op;
    while (tp) {
      cnt = cnt + tp / v[i];
      tp /= v[i];
    }
    if (cnt < num[v[i]]) return false;
  }
  return true;
}
void solve() {
  for (int i = Max - 1; i >= 2; i--) num[i] += num[i + 1];
  for (int i = 2; i <= Max; i++) {
    if (pre[i] == -1) {
      pre[i] = i;
      v.push_back(i);
    }
    for (int j = 0; i * v[j] <= Max; j++) {
      pre[i * v[j]] = v[j];
      if (i % v[j] == 0) break;
    }
  }
  for (int i = Max; i >= 2; i--) {
    if (pre[i] != i) {
      num[pre[i]] += num[i];
      num[i / pre[i]] += num[i];
    }
  }
  long long l = 1, r = 1e18;
  while (l < r) {
    long long mid = (l + r) / 2;
    if (judge(mid))
      r = mid;
    else
      l = mid + 1;
  }
  cout << l << endl;
}
int main() {
  while (scanf("%d", &n) != EOF) {
    initial();
    input();
    solve();
  }
  return 0;
}
