#include <bits/stdc++.h>
using namespace std;
const int B = 5005;
const int P = 673;
vector<pair<int, int>> fac[B];
int prime_id[B];
array<int, P> pcnt[2 * B];
int ids[B + B];
int ne;
bool is_lca(int i, int j) {
  int dif = 0;
  while (dif < P and pcnt[i][dif] == pcnt[j][dif]) dif++;
  if (dif >= P) return true;
  if (pcnt[i][dif] > pcnt[j][dif]) return false;
  for (int k = dif + 1; k < P; k++)
    if (pcnt[i][k]) {
      return false;
    }
  return true;
}
map<array<int, P>, int> go;
array<int, P> calc_lca(int i, int j) {
  int dif = 0;
  array<int, P> ans = {};
  while (dif < P and pcnt[i][dif] == pcnt[j][dif]) {
    ans[dif] = pcnt[i][dif];
    dif++;
  }
  ans[dif] = min(pcnt[i][dif], pcnt[j][dif]);
  return ans;
}
int calc_dist(int i, int j) {
  int ans = 0;
  for (int w = 0; w < P; w++) {
    ans += abs(pcnt[i][w] - pcnt[j][w]);
  }
  return ans;
}
const int N = B + B;
vector<pair<int, int>> g[N];
int cnt[N];
vector<int> par[N];
int sub[N], tot;
using ll = long long;
ll cur;
int dp[N];
void prec(int u) {
  sub[u] = cnt[u];
  for (auto [v, w] : g[u]) {
    prec(v);
    sub[u] += sub[v];
    cur += 1LL * sub[v] * w;
  }
}
ll ans;
void solve(int u) {
  ans = min(ans, cur);
  for (auto [v, w] : g[u]) {
    if (!sub[v]) continue;
    cur += 1LL * (tot - sub[v]) * w;
    cur -= 1LL * sub[v] * w;
    solve(v);
    cur += 1LL * sub[v] * w;
    cur -= 1LL * (tot - sub[v]) * w;
  }
}
int vis[N];
void dfs(int u) {
  vis[u] = 1;
  for (auto [v, w] : g[u]) {
    dfs(v);
    dp[u] = max(dp[u], dp[v]);
  }
  dp[u]++;
}
int main() {
  for (int i = 2; i < B; i++) {
    fac[i] = fac[i - 1];
  }
  for (int i = 2, me = 0; i < B; i++)
    if (!prime_id[i]) {
      prime_id[i] = ++me;
      for (int j = i + i; j < B; j += i) {
        prime_id[j] = -1;
      }
    }
  for (int i = 2; i < B; i++) {
    pcnt[i] = pcnt[i - 1];
    int x = i;
    for (int j = 2; j <= x; j++) {
      while (x % j == 0) {
        pcnt[i][prime_id[j]]++;
        x /= j;
      }
    }
  }
  for (int i = 1; i < B; i++) {
    ids[i] = i;
    reverse(pcnt[i].begin(), pcnt[i].end());
    go[pcnt[i]] = i;
  }
  sort(ids + 1, ids + B, [](int i, int j) { return pcnt[i] < pcnt[j]; });
  for (int q = 1; q + 1 < B; q++) {
    int i = ids[q];
    int j = ids[q + 1];
    int lca = i;
    if (is_lca(i, j))
      lca = i;
    else if (is_lca(j, i))
      lca = j;
    else {
      auto arr = calc_lca(i, j);
      if (!go.count(arr)) {
        go[arr] = ne + B;
        pcnt[ne + B] = arr;
        lca = ne + B;
        ne++;
      } else {
        lca = go[arr];
      }
    }
  }
  for (int i = 1; i < B + ne; i++) ids[i] = i;
  sort(ids + 1, ids + B + ne, [](int i, int j) { return pcnt[i] > pcnt[j]; });
  stack<int> s;
  for (int q = 1; q < B + ne; q++) {
    int i = ids[q];
    while (!s.empty() and is_lca(i, s.top())) {
      int j = s.top();
      s.pop();
      g[i].push_back({j, calc_dist(i, j)});
    }
    s.push(i);
  }
  for (int i = 0; i < N; i++) {
    sort(g[i].begin(), g[i].end());
    g[i].resize(unique(g[i].begin(), g[i].end()) - g[i].begin());
  }
  dfs(1);
  for (int i = 1; i < B; i++)
    if (!vis[i]) {
      printf("> %d\n", i);
      break;
    }
  int n;
  scanf("%d", &n);
  tot = n;
  while (n--) {
    int k;
    scanf("%d", &k);
    k = max(1, k);
    cnt[k]++;
  }
  prec(1);
  assert(sub[1] == tot);
  ans = cur;
  solve(1);
  printf("%lld\n", ans);
}
