Be Geeks!

시간 제한2초메모리 제한512 MB

요약
모든 부분 배열에 대해 gcd와 최댓값의 곱을 더한 값을 1e9+7로 나눈 나머지를 구한다. N은 최대 2e5이다.
난이도

어려움10점 중 9점

유형
수학, 정수론, 분할 정복, 동적 계획법
정답자
아직 제출이 없습니다

문제

음악 밴드 Be Geeks!의 이름은 우연히 붙은 것이 아니다. 모든 멤버가 진짜 수학 덕후이기 때문이다. 그중에서도 멤버들은 수열의 여러 가지 성질을 살펴보는 것을 좋아한다. 그들이 관심을 갖는 주제의 한 가지 예를 보자.

  • AA를 양의 정수로 이루어진 비어 있지 않은 수열 A=(a1,a2,…,aN)A = (a_1, a_2, \ldots, a_N)이라 하자.
  • G(i,j)=gcd⁡(ai,ai+1,…,aj)G(i, j) = \gcd(a_i, a_{i+1}, \ldots, a_j)라 하자. 단, 1≤i≤j≤N1 \le i \le j \le N이다.
  • M(i,j)=max⁡(ai,ai+1,…,aj)M(i, j) = \max(a_i, a_{i+1}, \ldots, a_j)라 하자. 단, 1≤i≤j≤N1 \le i \le j \le N이다.
  • P(i,j)=G(i,j)⋅M(i,j)P(i, j) = G(i, j) \cdot M(i, j)라 하자. 단, 1≤i≤j≤N1 \le i \le j \le N이다.
  • F(A)=∑P(i,j)F(A) = \sum P(i, j)라 하자. 여기서 합은 1≤i≤j≤N1 \le i \le j \le N인 모든 정수 쌍 (i,j)(i, j)에 대해 취한다.

함수 gcd⁡\gcd는 주어진 값들의 최대공약수를 뜻한다. 비어 있지 않은 정수 수열의 최대공약수는 수열의 모든 정수를 나누어떨어지게 하는 가장 큰 정수이다.

입력

첫째 줄에 정수 NN이 주어진다. (1≤N≤2⋅1051 \le N \le 2 \cdot 10^5) 둘째 줄에 NN개의 정수 a1,a2,…,aNa_1, a_2, \ldots, a_N이 주어진다. (1≤ai≤1091 \le a_i \le 10^9)

출력

F(A)F(A)를 1 000 000 0071\,000\,000\,007로 나눈 나머지를 출력한다.

예제2

  1. 예제 1

    입력
    4
    1 2 3 4
    
    예상 출력
    50
    
  2. 예제 2

    입력
    5
    2 4 6 12 3
    
    예상 출력
    457