#include #include int N; int * A; void get_input() { scanf("%d", &N); A = new int[N]; for (int i = 0 ; i < N ; i++) { scanf("%d", &A[i]); } } int gcd(int a, int b) { if (a < b) { if (b % a == 0) { return a; } for (int i = (int)sqrt(a) + 1; i >= 1; i--) { if (b % i ==0 && a % i ==0) { return i; } } } else { if (a % b == 0) { return b; } for (int i = (int)sqrt(b) + 1; i >= 1; i--) { if (a % i ==0 && b % i ==0) { return i; } } } } int main() { unsigned long long sum = 0; get_input(); for (int i = 0 ; i < N ; i++) { int max = 0; int div = A[i]; for (int j = i ; j < N ; j++) { if (A[j] > max) { max = A[j]; } int tmp = gcd(div, A[j]); if (tmp < div) { div = tmp; } sum += max*div; sum %= 1000000007; } } printf("%d\n", (int)sum); return 0; }