#include <bits/stdc++.h>
using namespace std;
int n;
int a[100005];
long long pow_mod(long long x, long long n) {
  long long res = 1;
  while (n) {
    if (n & 1) res = res * x % 1000000007;
    x = x * x % 1000000007;
    n >>= 1;
  }
  return res;
}
void solve() {
  int i, j;
  long long ans = 0, res;
  sort(a + 1, a + n + 1);
  for (i = 1; i <= a[n]; i++) {
    vector<int> fac;
    for (j = 1; j * j <= i; j++) {
      if (i % j == 0) {
        fac.push_back(j);
        if (j * j != i) fac.push_back(i / j);
      }
    }
    sort(fac.begin(), fac.end());
    int pos, pre = 1;
    res = 1;
    for (j = 1; j < fac.size(); j++) {
      pos = lower_bound(a + 1, a + n + 1, fac[j]) - a;
      res *= pow_mod(j, pos - pre);
      res %= 1000000007;
      pre = pos;
    }
    ans +=
        res *
        ((pow_mod(j, n - pre + 1) - pow_mod(j - 1, n - pre + 1) + 1000000007) %
         1000000007);
    ans %= 1000000007;
  }
  printf("%I64d\n", ans);
}
int main() {
  int i, j;
  while (~scanf("%d", &n)) {
    for (i = 1; i <= n; i++) {
      scanf("%d", &a[i]);
    }
    solve();
  }
  return 0;
}
