#include <bits/stdc++.h>
using namespace std;
const int mx = 100010;
int pr[mx], _size, cnt[mx];
int dp[510][15100];
bool p[mx];
int main() {
  int i, j, k, n, root = sqrt(mx);
  memset(p, 1, sizeof p);
  for (i = 3; i <= root; i += 2) {
    if (p[i >> 1] == 0) continue;
    for (j = i + i + i; j < mx; j += i + i) {
      p[j >> 1] = 0;
    }
  }
  _size = 0;
  pr[_size++] = 2;
  for (i = 3; i < mx; i += 2) {
    if (p[i / 2]) pr[_size++] = i;
  }
  memset(cnt, 0, sizeof cnt);
  scanf("%d", &n);
  for (__typeof(n) i = 0; i < n; i++) {
    scanf("%d", &k);
    root = sqrt(k);
    for (j = 0; j < _size; j++) {
      while (k % pr[j] == 0) {
        k /= pr[j];
        cnt[j]++;
      }
    }
    if (k > 1) {
      pr[_size++] = k;
      cnt[_size - 1] = 1;
    }
  }
  for (i = 0; i < 502; i++) dp[i][0] = 1;
  for (i = 0; i < 15002; i++) dp[1][i] = 1;
  for (i = 2; i < 502; i++) {
    for (j = 1; j < 15002; j++) {
      dp[i][j] = dp[i][j - 1] + dp[i - 1][j];
      if (dp[i][j] >= int(1e9 + 7)) dp[i][j] -= int(1e9 + 7);
    }
  }
  long long ans = 1;
  for (__typeof(_size) i = 0; i < _size; i++) {
    ans = ans * dp[n][cnt[i]] % int(1e9 + 7);
  }
  cout << ans << endl;
}
