#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
const int MAXN = 300005;
int N, T, D[MAXN];
long long pre[MAXN], res;
unordered_map<int, vector<int>> primes;
inline long long mul(long long a, long long b) { return a * b % MOD; }
inline long long add(long long a, long long b) { return (a + b) % MOD; }
inline long long sub(long long a, long long b) { return (a - b + MOD) % MOD; }
long long exp(long long a, long long b) {
  if (b == 0) return 1;
  long long s = exp(a, b / 2);
  return mul(b % 2 ? a : 1, mul(s, s));
}
void solve(vector<int> v) {
  sort(v.begin(), v.end());
  for (int i = 0; i < v.size(); i++) {
    res = add(res, pre[N - v.size() + i] * v[i]);
  }
}
int main() {
  for (int i = 1; i < MAXN; i++) {
    for (int j = i + i; j < MAXN; j += i) {
      D[j] = j / i;
    }
  }
  scanf("%d", &N);
  for (int i = 0; i < N; i++) {
    scanf("%d", &T);
    while (T != 1) {
      int p = D[T], c = 0;
      while (T % p == 0) {
        T /= p;
        c += 1;
      }
      primes[p].push_back(c);
    }
  }
  long long binom = 1;
  pre[0] = sub(0, exp(2, N - 1) - 1);
  for (int i = 1; i < N; i++) {
    binom = mul(binom, mul(N + 1 - i, exp(i, MOD - 2)));
    pre[i] = add(pre[i - 1], binom);
  }
  for (auto it : primes) {
    solve(it.second);
  }
  printf("%lld\n", res);
}
