#include <bits/stdc++.h>
using namespace std;
long long mod = 1000000007;
long long pw(long long x, long long y) {
  if (y == 0) return 1;
  long long ans = pw(x, y / 2);
  ans *= ans;
  ans %= mod;
  if (y % 2) {
    ans *= x;
    ans %= mod;
  }
  return ans;
}
vector<int> v;
int n, a[200005];
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i]);
  }
  long long ans = 0;
  sort(a, a + n);
  for (int i = 1; i <= a[n - 1]; i++) {
    int u = sqrt(i);
    for (int j = 1; j <= u; j++) {
      if (i % j == 0) {
        v.push_back(j);
      }
    }
    u = v.size();
    for (int j = u - 1; j >= 0; j--) {
      int k = i / v[j];
      if (k == v[j]) continue;
      v.push_back(k);
    }
    int x = 1;
    long long temp = 1;
    for (int j = v.size() - 1; j >= 0; j--) {
      int y = lower_bound(a, a + n, v[j]) - a;
      y = n - y - x;
      if (y <= 0) continue;
      long long z = 1;
      if (j == v.size() - 1) {
        z = pw(j + 1, y + 1);
        if (j) z -= pw(j, y + 1);
        z += mod;
        if (z >= mod) z -= mod;
      } else
        z = pw(j + 1, y);
      temp *= z;
      temp %= mod;
      x += y;
      if (x == n) break;
    }
    ans += temp;
    ans %= mod;
    v.clear();
  }
  printf("%lld\n", ans);
}
