#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
map<long long, int> mp[100005];
map<long long, int>::iterator it;
vector<int> G[100005];
long long val[100005];
long long ans = 0;
void add(int pos, long long g, int num) {
  ans = (ans + g * num % mod) % mod;
  mp[pos][g] += num;
}
void dfs(int x, int fa) {
  add(x, val[x], 1);
  int tot = G[x].size();
  for (int i = 0; i < tot; i++) {
    int v = G[x][i];
    if (v == fa) continue;
    for (it = mp[x].begin(); it != mp[x].end(); it++) {
      add(v, gcd(it->first, val[v]), it->second);
    }
    dfs(v, x);
  }
}
int main() {
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> val[i];
  }
  for (int i = 1; i < n; i++) {
    int a, b;
    cin >> a >> b;
    G[a].push_back(b);
    G[b].push_back(a);
  }
  dfs(1, 0);
  cout << ans;
}
