#include <bits/stdc++.h>
using namespace std;
const long long maxn = 5009;
vector<pair<long long, long long> > p[2 * maxn];
vector<long long> g[2 * maxn];
vector<long long> primes;
long long mn[maxn];
long long cnt[2 * maxn];
long long n, N;
long long sz[2 * maxn];
long long check(vector<pair<long long, long long> >& p1,
                vector<pair<long long, long long> >& p2) {
  long long sum1 = 0;
  for (pair<long long, long long> e : p1) sum1 += e.second;
  long long sum2 = 0;
  for (pair<long long, long long> e : p2) sum2 += e.second;
  if (sum1 < sum2) return 1;
  if (sum1 == sum2) return 2;
  return 0;
}
void print(vector<pair<long long, long long> >& p1) {
  for (pair<long long, long long> e : p1)
    cout << e.first << " " << e.second << "  ";
  cout << "\n";
}
void find_lca(vector<pair<long long, long long> >& p1,
              vector<pair<long long, long long> >& p2, long long i,
              vector<pair<long long, long long> >& p3, vector<long long>& st) {
  p3.resize(0);
  long long j = 0;
  while (j < (long long)p1.size() && j < (long long)p2.size() &&
         p1[(long long)p1.size() - 1 - j] == p2[(long long)p2.size() - 1 - j])
    j++;
  if (j < (long long)p1.size() && p1[(long long)p1.size() - 1 - j].first ==
                                      p2[(long long)p2.size() - 1 - j].first)
    p3.emplace_back(p1[(long long)p1.size() - 1 - j]);
  j--;
  while (j >= 0) {
    p3.emplace_back(p1[(long long)p1.size() - 1 - j]);
    j--;
  }
  long long pr = -1;
  while (!st.empty() && check(p[st.back()], p3) == 0) {
    if (pr != -1) {
      g[pr].emplace_back(st.back());
      g[st.back()].emplace_back(pr);
    }
    pr = st.back();
    st.pop_back();
  }
  if (!st.empty() && check(p3, p[st.back()]) == 2) {
    p3.resize(0);
    if (pr != -1) {
      g[pr].emplace_back(st.back());
      g[st.back()].emplace_back(pr);
    }
  } else {
    st.emplace_back(n);
    g[n].resize(0);
    if (pr != -1) {
      g[pr].emplace_back(st.back());
      g[st.back()].emplace_back(pr);
    }
    n++;
  }
  if (check(p3, p2) == 1) st.emplace_back(i);
}
long long check_graph() {
  map<long long, long long> m;
  for (long long i = 1; i < n; i++) {
    long long u = 1;
    for (pair<long long, long long> e : p[i]) {
      for (long long j = 0; j < e.second; j++) u *= e.first;
    }
    if (m.find(u) != m.end()) {
      cout << i << " " << u << " " << m[u] << endl;
      return 1;
    }
    m[u] = i;
  }
  for (long long i = 2; i < n; i++) {
    long long u = 1;
    for (pair<long long, long long> e : p[i]) {
      for (long long j = 0; j < e.second; j++) u *= e.first;
    }
    long long cnt = 0;
    for (long long to : g[i]) {
      long long y = 1;
      for (pair<long long, long long> e : p[to]) {
        for (long long j = 0; j < e.second; j++) y *= e.first;
      }
      if (u % y == 0)
        cnt++;
      else if (y % u != 0) {
        cout << i << " " << to << " " << u << " " << y << endl;
        return 2;
      }
    }
    if (cnt > 1) return 3;
    cout << i << " " << u << endl;
    while (u > 1) {
      u /= mn[u];
      cout << " " << u << endl;
      if (m.find(u) != m.end()) {
        long long v = m[u];
        bool fl = 0;
        for (long long to : g[i]) {
          if (to == v) fl = 1;
        }
        if (!fl) {
          return 4;
        }
        break;
      }
    }
  }
  for (long long i = 1; i < n; i++) {
    for (long long k = i + 1; k < n; k++) {
      long long u = 1;
      for (pair<long long, long long> e : p[i]) {
        for (long long j = 0; j < e.second; j++) u *= e.first;
      }
      long long y = 1;
      for (pair<long long, long long> e : p[k]) {
        for (long long j = 0; j < e.second; j++) y *= e.first;
      }
      while (u != y) {
        if (u > y)
          u /= mn[u];
        else
          y /= mn[y];
      }
      if (m.find(u) == m.end()) return 5;
    }
  }
  return 0;
}
void find_sz(long long v, long long pr) {
  sz[v] = cnt[v];
  for (long long to : g[v]) {
    if (to == pr) continue;
    find_sz(to, v);
    sz[v] += sz[to];
  }
}
long long find_c(long long v, long long pr) {
  for (long long to : g[v]) {
    if (to == pr) continue;
    if (sz[to] >= (N + 1) / 2) return find_c(to, v);
  }
  return v;
}
long long find_ans(long long v, long long pr) {
  long long ans = 0;
  for (long long to : g[v]) {
    if (to == pr) continue;
    long long kek = 0;
    for (pair<long long, long long> e : p[to]) kek += e.second;
    for (pair<long long, long long> e : p[v]) kek -= e.second;
    kek = abs(kek);
    ans += find_ans(to, v) + sz[to] * kek;
  }
  return ans;
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  for (long long i = 2; i < maxn; i++) mn[i] = i;
  for (long long i = 2; i < maxn; i++) {
    if (mn[i] == i) primes.emplace_back(i);
    long long u = i;
    long long e = 0;
    while (u > 1) {
      while (e < (long long)p[i - 1].size() && p[i - 1][e].first <= mn[u]) {
        p[i].emplace_back(p[i - 1][e]);
        e++;
      }
      if (!p[i].empty() && p[i].back().first == mn[u])
        p[i].back().second++;
      else
        p[i].emplace_back(mn[u], 1);
      u /= mn[u];
    }
    while (e < (long long)p[i - 1].size()) {
      p[i].emplace_back(p[i - 1][e]);
      e++;
    }
    for (long long e : primes) {
      if (e > mn[i] || e * i >= maxn) break;
      mn[e * i] = e;
    }
  }
  cin >> N;
  for (long long i = 0; i < N; i++) {
    long long x;
    cin >> x;
    if (!x) x = 1;
    cnt[x]++;
  }
  n = maxn;
  vector<long long> st;
  st.emplace_back(1);
  st.emplace_back(2);
  for (long long i = 3; i < maxn; i++) find_lca(p[i - 1], p[i], i, p[n], st);
  long long pr = -1;
  while (!st.empty()) {
    if (pr != -1) {
      g[st.back()].emplace_back(pr);
      g[pr].emplace_back(st.back());
    }
    pr = st.back();
    st.pop_back();
  }
  find_sz(1, -1);
  long long v = find_c(1, -1);
  find_sz(v, -1);
  cout << find_ans(v, -1);
}
