#include <bits/stdc++.h>
using namespace std;
const int maxN = 35e5 + 123;
const long long oo = 1e17 + 11;
int tcases = 1;
char ch;
int readInt() {
  bool fl = 0;
  while (ch = getchar(), ch != '-' && (ch < '0' || ch > '9'))
    ;
  if (ch == '-') {
    fl = 1;
    while (ch = getchar(), ch < '0' || ch > '9')
      ;
  }
  int r = ch - '0';
  while (ch = getchar(), ch >= '0' && ch <= '9') r = r * 10 + (ch - '0');
  return fl ? -r : r;
}
int N, m = 0, k = 0;
int Count[5001], C[5001];
vector<int> primeslist, pfactor[5001];
bool p[5001];
void init() {
  for (int i = 2; i <= 5000; ++i) p[i] = 1;
  for (int i = 2; i * i <= 5000; ++i)
    if (p[i])
      for (int j = i * i; j <= 5000; j += i) p[j] = 0;
  for (int x = 2; x <= 5000; ++x)
    if (p[x]) {
      primeslist.push_back(x);
      for (int i = 1; i <= 5000; ++i) {
        int pw = x, k = 1;
        while (pw * x <= i) pw *= x, k += 1;
        int cnt = 0, t = 0;
        while (k > 0) {
          cnt += k * (i / pw - t);
          t = i / pw;
          --k;
          pw /= x;
        }
        pfactor[i].push_back(cnt);
      }
    }
  m = primeslist.size();
  for (int i = 0; i < m; ++i) pfactor[0].push_back(0);
}
bool cmp(int i, int j) {
  for (int k = m - 1; k >= 0; --k)
    if (pfactor[i][k] < pfactor[j][k]) return 1;
  return 0;
}
int nodes = 1;
vector<pair<int, int> > e[maxN], a[5001];
vector<int> nodeId[maxN];
int important[maxN];
int id[5001];
void build(int ver, int r, int root) {
  for (int i = r; i >= 0; --i) {
    e[++nodes].push_back(make_pair(root, pfactor[ver][i]));
    e[root].push_back(make_pair(nodes, pfactor[ver][i]));
    nodeId[ver][i] = nodes;
    root = nodes;
  }
  important[nodes] = ver;
}
void newEd(int u, int v, int d) {
  a[u].push_back(make_pair(v, d));
  a[v].push_back(make_pair(u, d));
}
void dfs(int u, int curImporNode, int p = 0, int dist = 0) {
  for (int i = 0; i < e[u].size(); ++i) {
    int v = e[u][i].first;
    if (v == p) continue;
    if (important[v]) {
      newEd(curImporNode, important[v], dist + e[u][i].second);
      dfs(v, important[v], u, 0);
    } else {
      dfs(v, curImporNode, u, dist + e[u][i].second);
    }
  }
}
void buildGraph() {
  if (Count[1] > 0) important[1] = 1;
  for (int ii = 1; ii <= k; ++ii) {
    int x = C[ii], y = C[ii - 1];
    if (x == 1) continue;
    for (int i = m - 1; i >= 0; --i)
      if (pfactor[x][i] > 0) {
        nodeId[x].resize(i + 1);
        for (int j = i; j >= 0; --j)
          if (pfactor[x][j] == pfactor[y][j]) nodeId[x][j] = nodeId[y][j];
        break;
      }
    for (int i = m - 1; i >= 0; --i)
      if (pfactor[x][i] != pfactor[y][i]) {
        if (pfactor[y][i] == 0) {
          build(x, i, 1);
        } else {
          int root = nodeId[y][i];
          ++nodes;
          e[nodes].push_back(make_pair(root, pfactor[x][i] - pfactor[y][i]));
          e[root].push_back(make_pair(nodes, pfactor[x][i] - pfactor[y][i]));
          nodeId[x][i] = nodes;
          if (i == 0) {
            important[nodes] = x;
          } else {
            build(x, i - 1, nodes);
          }
        }
        break;
      }
  }
  dfs(nodes, C[k]);
}
long long G[maxN], fbr[maxN], F[maxN], res = oo;
void calG(int u = 1, int p = 0) {
  fbr[u] = 0;
  G[u] = Count[important[u]];
  for (int i = 0; i < e[u].size(); ++i) {
    int v = e[u][i].first;
    if (v == p) continue;
    calG(v, u);
    G[u] += G[v];
    fbr[u] += G[v] * e[u][i].second + fbr[v];
  }
}
void calF(int u = 1, int p = 0, long long len = 0) {
  if (u == 1)
    F[u] = fbr[u];
  else {
    F[u] = (F[p] - fbr[u] - G[u] * len) + (G[1] - G[u]) * len + fbr[u];
  }
  res = min(res, F[u]);
  for (int i = 0; i < e[u].size(); ++i) {
    int v = e[u][i].first;
    if (v == p) continue;
    calF(v, u, e[u][i].second);
  }
}
void testcase() {
  init();
  scanf("%d", &N);
  for (int i = 1; i <= N; ++i) {
    int x;
    scanf("%d", &x);
    if (x == 0) x = 1;
    Count[x] += 1;
    if (Count[x] == 1) {
      C[++k] = x;
    }
  }
  sort(C + 1, C + 1 + k, cmp);
  buildGraph();
  calG();
  calF();
  printf("%lli", res);
}
int main() {
  for (int i = 1; i <= tcases; ++i) testcase();
  return 0;
}
