#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef unsigned long long ull;
// Sử dụng Modulo 2^61 - 1 (Số nguyên tố Mersenne) cực nhanh và an toàn
typedef __int128_t int128;
const ull MOD = (1ULL << 61) - 1;
ull modMul(ull a, ull b) {
int128 res = (int128)a * b;
ull ans = (ull)(res >> 61) + (ull)(res & MOD);
if (ans >= MOD) ans -= MOD;
return ans;
}
int N;
int A[100005];
ull powB[100005];
ull hFwd[100005], hBwd[100005];
int B[100005], revC[100005];
long long F[205], exact[205];
void buildHash(int* v, ull* h) {
h[0] = 0;
for (int i = 0; i < N; i++) {
h[i + 1] = (modMul(h[i], 211) + v[i]) % MOD;
}
}
ull getHash(ull* h, int l, int r) {
ull res = h[r] + MOD - modMul(h[l - 1], powB[r - l + 1]);
return res % MOD;
}
int main() {
// Tăng tốc nhập xuất tối đa
ios::sync_with_stdio(false);
cin.tie(NULL);
if (!(cin >> N)) return 0;
for (int i = 1; i <= N; i++) cin >> A[i];
powB[0] = 1;
for (int i = 1; i <= N; i++) powB[i] = modMul(powB[i - 1], 211);
for (int g = 1; g <= 200; g++) {
// Tối ưu: Điền trực tiếp vào mảng tĩnh
for (int i = 0; i < N; i++) {
int val = A[i + 1] % g;
B[i] = val;
revC[N - 1 - i] = (val == 0) ? 0 : g - val;
}
buildHash(B, hFwd);
buildHash(revC, hBwd);
long long total_g = 0;
for (int i = 1; i < N; i++) {
int low = 1, high = min(i, N - i);
int best_k = 0;
// Một tối ưu nhỏ: check nhanh k=1 trước khi vào Binary Search
if ( (A[i] + A[i+1]) % g != 0 ) continue;
while (low <= high) {
int mid = low + (high - low) / 2;
// So sánh hash
if (getHash(hFwd, i - mid + 1, i) == getHash(hBwd, N - (i + mid) + 1, N - i)) {
best_k = mid;
low = mid + 1;
} else {
high = mid - 1;
}
}
total_g += best_k;
}
F[g] = total_g;
}
long long total_ans = 0;
for (int g = 200; g >= 1; g--) {
exact[g] = F[g];
for (int m = 2 * g; m <= 200; m += g) exact[g] -= exact[m];
total_ans += (long long)g * exact[g];
}
cout << total_ans << endl;
return 0;
}