#include<bits/stdc++.h>
using namespace std;
#define VI vector<int>
#define PII pair<int, int>
#define VPI vector<PII>
#define mp make_pair
#define eb emplace_back
#define pb push_back
#define st first
#define nd second
#define endl '\n'
#define debug(x) cerr << #x << " " << x << endl;
#define ll long long

#define int ll
#define MID (L+R)/2

const int N = (1<<20), inf = 2e9 + 7, M = 1000000007;

vector<pair<int, int>> monot;
int tbl[N], gcd[N];

int load[2 * N + 7];
int lazy[2 * N + 7];

int curVal[2 * N + 7];

void pushLazy(int v){
	if (v > N || lazy[v] == 0){
		return;
	}
	
	lazy[v] = 0;
	
	curVal[v * 2] = curVal[v * 2 + 1] = curVal[v];
	lazy[v * 2] = lazy[v * 2 + 1] = 1;
	load[v * 2] = load[v * 2 + 1] = load[v] / 2;
	
	return;
}

void ins(int l, int r, int x, int v = 1, int L = 1, int R = N){
	if (l > R || r < L)
		return;
		
	pushLazy(v);
		
	if (L >= l && R <= r){
		curVal[v] = x;
		load[v] = (R - L + 1) * x;
		lazy[v] = 1;
		return;
	}
	
	ins(l, r, x, v * 2, L, MID);
	ins(l, r, x, v * 2 + 1, MID + 1, R);
	
	load[v] = load[v * 2] + load[v * 2 + 1];
}

int que(int l, int r, int v = 1, int L = 1, int R = N){
	if (l > R || r < L)
		return 0;

	pushLazy(v);
	
	if (L >= l && R <= r){
		return load[v];
	}
	
	return que(l, r, v * 2, L, MID) + que(l, r, v * 2 + 1, MID + 1, R);
}

void solve(){
	int n;
	cin >> n;
	int wynik = 0;
	monot.pb(mp(inf, 0));
	for (int i = 1; i <= n; i++) {
		cin >> tbl[i];
		gcd[i] = tbl[i];
		for (int j = i - 1; j > 0; j--) {
			int newgcd = __gcd(gcd[j], tbl[i]);
			if (newgcd == gcd[j])
				break;
			gcd[j] = newgcd;
		}
		//cout << "Tu\n";
		while(monot[monot.size() - 1].st <= tbl[i])
			monot.pop_back();
		ins(monot[monot.size() - 1].nd + 1, i, tbl[i]);
		monot.pb(mp(tbl[i], i));
		int it = i;
		while (it != 0) {
			int aktgcd = gcd[it];
			int l = lower_bound(gcd + 1, gcd + 1 + i, aktgcd) - gcd, p = upper_bound(gcd + 1, gcd + 1 + i, aktgcd) - gcd;
			//cout << l << " " << p << " " << aktgcd <<  " " << it << "\n";
			wynik += aktgcd * (que(l, p - 1) % M);
			wynik %= M;
			it = l - 1;
		}
	}
	cout << wynik;
}

int32_t main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	int test = 1;
	
	while(test--){
		solve();
	}
	
	return 0;
}


