#include <bits/stdc++.h>
using namespace std;
const long long int INF = 9223372036854775807;
const long long int mod = 1e9 + 7;
int MOD(int a, int b) {
  if (a > b)
    return a - b;
  else
    return b - a;
}
long long int max3(long long int a, long long int b, long long int c) {
  return max(c, max(a, b));
}
long long int min3(long long int a, long long int b, long long int c) {
  return min(a, min(b, c));
}
long long int power(long long int x, long long int y, long long int mod1) {
  long long int res = 1;
  while (y > 0) {
    if (y & 1) res = (res * x) % mod1;
    y = y >> 1;
    x = (x * x) % mod1;
  }
  return res;
}
long long int logg(long long int a) {
  long long int x = 0;
  while (a > 1) {
    x++;
    a /= 2;
  }
  return x;
}
long long int gcd(long long int a, long long int b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
long long int abso(long long int x) {
  if (x < 0) {
    return -x;
  }
  return x;
}
long long int ceiling(long long int a, long long int b) {
  if (a % b == 0) {
    return a / b;
  } else {
    return a / b + 1;
  }
}
long long int modinv(long long int x, long long int p) {
  return power(x, p - 2, p);
}
struct point {
  long long int x;
  long long int y;
};
long long int cross(point a, point b) { return a.x * b.y - b.x * a.y; }
bool ccw(point p1, point p2) {
  if (cross(p1, p2) > 0) {
    return true;
  } else {
    return false;
  }
}
void ccw_sort(vector<point> &v) {
  vector<point> v1, v2;
  for (int i = 0; i < v.size(); i++) {
    if (v[i].y > 0) {
      v1.push_back(v[i]);
    } else {
      v2.push_back(v[i]);
    }
  }
  sort(v1.begin(), v1.end(), ccw);
  sort(v2.begin(), v2.end(), ccw);
  for (int i = 0; i < v2.size(); i++) {
    v1.push_back(v2[i]);
  }
  v = v1;
}
const long long int mx = 5000;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  long long int n;
  cin >> n;
  vector<int> k(n);
  map<int, int> cnt;
  for (int i = 0; i < n; i++) {
    cin >> k[i];
    cnt[k[i]]++;
  }
  vector<pair<int, int>> v;
  for (auto it = cnt.begin(); it != cnt.end(); it++) {
    v.push_back(*it);
  }
  vector<map<int, int>> sv(mx + 1);
  for (int i = 2; i <= mx; i++) {
    if (sv[i].size() == 0) {
      if (i != 1) {
        for (int j = i; j <= mx; j += i) {
          int cur = j;
          while (cur % i == 0) {
            sv[j][i]++;
            cur = cur / i;
          }
        }
      } else {
        for (int j = i; j <= mx; j += i) {
          sv[j][i]++;
        }
      }
    }
  }
  vector<vector<pair<int, int>>> facs(mx + 1);
  vector<long long int> numfacs(mx + 1);
  numfacs[1] = 0;
  for (int i = 2; i <= mx; i++) {
    map<int, int> g;
    long long int x = 0;
    for (auto it = sv[i].begin(); it != sv[i].end(); it++) {
      g[(*it).first] += (*it).second;
      x += (*it).second;
    }
    for (int j = 0; j < facs[i - 1].size(); j++) {
      g[facs[i - 1][j].first] += facs[i - 1][j].second;
      x += facs[i - 1][j].second;
    }
    for (auto it = g.begin(); it != g.end(); it++) {
      facs[i].push_back((*it));
    }
    numfacs[i] = x;
  }
  for (int i = 1; i <= mx; i++) {
  }
  long long int ans = 0;
  long long int prev_dist = INF;
  long long int cur_dist = 0;
  for (int i = 0; i < v.size(); i++) {
    cur_dist += ((numfacs[v[i].first]) * v[i].second);
  }
  vector<pair<int, int>> cur;
  for (int j = 0; j < v.size(); j++) {
    cur.push_back(v[j]);
  }
  while (cur_dist < prev_dist) {
    prev_dist = cur_dist;
    map<int, int> g;
    pair<int, int> best = make_pair(-1, -1);
    for (int j = 0; j < cur.size(); j++) {
      pair<int, int> x = make_pair(-1, -1);
      if (facs[cur[j].first].size() > 0 &&
          facs[cur[j].first].back().second > 1) {
        x = make_pair(facs[cur[j].first][facs[cur[j].first].size() - 1].first,
                      cur[j].second);
      } else {
        if (facs[cur[j].first].size() > 0) {
          x = make_pair(facs[cur[j].first][facs[cur[j].first].size() - 1].first,
                        cur[j].second);
        }
      }
      if (x.first != -1) {
        g[x.first] += x.second;
        if (g[x.first] > best.second) {
          best = make_pair(x.first, g[x.first]);
        }
      }
    }
    if (best.first != -1) {
      cur_dist = prev_dist + (n - best.second) - best.second;
      vector<pair<int, int>> tmp;
      for (int j = 0; j < cur.size(); j++) {
        if (facs[cur[j].first].size() > 0 &&
            facs[cur[j].first].back().first == best.first) {
          tmp.push_back(cur[j]);
          if (facs[cur[j].first].size() > 0 &&
              facs[cur[j].first].back().second > 1) {
            facs[cur[j].first][facs[cur[j].first].size() - 1].second--;
          } else {
            if (facs[cur[j].first].size() > 0) {
              facs[cur[j].first].pop_back();
            }
          }
        }
      }
      cur = tmp;
    } else {
      break;
    }
  }
  cout << min(cur_dist, prev_dist) << endl;
}
