#include <bits/stdc++.h>
using namespace std;
const int Maxn = 1e5 + 100;
const long long Mod = 1e9 + 7;
int n;
int a[Maxn];
int Bs(int x) {
  int l = 1;
  int r = n;
  int ans = 0;
  while (l <= r) {
    int mid = l + r >> 1;
    if (a[mid] < x) {
      ans = mid;
      l = mid + 1;
    } else
      r = mid - 1;
  }
  return ans;
}
long long power(long long x, int n) {
  if (!n) return 1;
  if (n & 1) return x * power(x * x % Mod, n / 2) % Mod;
  return power(x * x % Mod, n / 2);
}
long long Get(const vector<int> &b) {
  if (!b.size()) return 0;
  int cnt = 0;
  long long ans = 1;
  for (int i = 0; i < b.size(); i++) {
    int x = Bs(b[i]);
    ans *= power(i, x - cnt);
    cnt = x;
    ans %= Mod;
  }
  ans *= power(b.size(), n - cnt);
  ans %= Mod;
  return ans;
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  sort(a + 1, a + n + 1);
  long long ans = 0;
  for (int i = 1; i <= a[n]; i++) {
    vector<int> divisor;
    for (int j = 1; j <= sqrt(i); j++) {
      if (i % j == 0) {
        divisor.push_back(j);
        if (j != i / j) divisor.push_back(i / j);
      }
    }
    sort(divisor.begin(), divisor.end());
    long long A = Get(divisor);
    divisor.pop_back();
    A -= Get(divisor);
    ans += A;
    ans %= Mod;
    if (ans < 0) ans += Mod;
  }
  cout << ans;
  return 0;
}
