#include <bits/stdc++.h>
using namespace std;
const int N = 5000;
int lp[N + 1];
int idx[N + 1];
vector<int> pr;
vector<int> powers[N + 1];
int level[N + 1];
void plusEqual(vector<int> &a, const vector<int> &b) {
  for (int i = 0; i < a.size(); i++) {
    a[i] += b[i];
  }
}
int m;
void pre() {
  for (int i = 2; i <= N; ++i) {
    if (lp[i] == 0) {
      lp[i] = i;
      idx[i] = pr.size();
      pr.push_back(i);
    }
    for (int j = 0; j < (int)pr.size() && pr[j] <= lp[i] && i * pr[j] <= N; ++j)
      lp[i * pr[j]] = pr[j];
  }
  m = pr.size();
  for (int i = 1; i <= N; i++) {
    powers[i].resize(m);
    fill(powers[i].begin(), powers[i].end(), 0);
    int x = i;
    while (x > 1) {
      powers[i][idx[lp[x]]]++;
      x /= lp[x];
    }
    if (i > 1) plusEqual(powers[i], powers[i - 1]);
    for (int j : powers[i]) level[i] += j;
  }
}
const int MAXN = 1e5 + 7;
int sz;
int lvl[MAXN];
int weight[MAXN];
vector<pair<int, int> > edg[MAXN];
vector<pair<vector<int>, pair<int, int> > > vc;
void buildTree(int p, int i, int l, int r) {
  if (l > r) return;
  if (i == vc[l].first.size()) {
    weight[p] = vc[l].second.second;
    buildTree(p, i, l + 1, r);
    return;
  }
  int k = l;
  while (k <= r && vc[l].first[i] == vc[k].first[i]) k++;
  int j = i;
  for (; j + 1 < vc[l].first.size(); j++) {
    bool ok = true;
    for (int _ = l; _ < k; _++) {
      if (vc[l].first[j + 1] != vc[_].first[j + 1]) {
        ok = false;
        break;
      }
    }
    if (!ok) break;
  }
  int u = sz++;
  lvl[u] = lvl[p] + j + 1 - i;
  edg[p].emplace_back(u, j + 1 - i);
  buildTree(u, j + 1, l, k - 1);
  buildTree(p, i, k, r);
}
int total;
long long ans;
int sbtr[MAXN];
void dfs(int u) {
  sbtr[u] = weight[u];
  for (pair<int, int> v : edg[u]) {
    dfs(v.first);
    sbtr[u] += sbtr[v.first];
  }
}
void solve(int u, long long curAns) {
  ans = min(ans, curAns);
  for (pair<int, int> v : edg[u]) {
    int x = sbtr[v.first];
    int y = total - sbtr[v.first];
    solve(v.first, curAns + (y - x) * 1LL * v.second);
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  pre();
  int n;
  cin >> n;
  total = n;
  map<int, int> mp;
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    if (x == 0) x = 1;
    mp[x]++;
  }
  n = mp.size();
  if (n == 1) {
    cout << 0 << endl;
    return 0;
  }
  for (auto payr : mp) {
    int x = payr.first;
    pair<vector<int>, pair<int, int> > p;
    for (int i = m - 1; i >= 0; i--) {
      for (int j = 0; j < powers[x][i]; j++) {
        p.first.push_back(pr[i]);
      }
    }
    p.second = payr;
    vc.push_back(p);
  }
  sort(vc.begin(), vc.end());
  sz = 1;
  buildTree(0, 0, 0, n - 1);
  for (int i = 0; i < sz; i++) {
    if (weight[i]) ans += weight[i] * 1LL * lvl[i];
  }
  dfs(0);
  solve(0, ans);
  cout << ans << endl;
  return 0;
}
