#include <bits/stdc++.h>
#pragma comment(linker, "/stack:640000000")
using namespace std;
const double EPS = 1e-9;
const int INF = 0x7f7f7f7f;
const double PI = acos(-1.0);
template <class T>
inline T _abs(T n) {
  return ((n) < 0 ? -(n) : (n));
}
template <class T>
inline T _max(T a, T b) {
  return (!((a) < (b)) ? (a) : (b));
}
template <class T>
inline T _min(T a, T b) {
  return (((a) < (b)) ? (a) : (b));
}
template <class T>
inline T _swap(T& a, T& b) {
  a = a ^ b;
  b = a ^ b;
  a = a ^ b;
}
template <class T>
inline T gcd(T a, T b) {
  return (b) == 0 ? (a) : gcd((b), ((a) % (b)));
}
template <class T>
inline T lcm(T a, T b) {
  return ((a) / gcd((a), (b)) * (b));
}
struct debugger {
  template <typename T>
  debugger& operator,(const T& v) {
    cerr << v << " ";
    return *this;
  }
} dbg;
int bitOn(int N, int pos) { return N = N | (1 << pos); }
int bitOff(int N, int pos) { return N = N & ~(1 << pos); }
bool bitCheck(int N, int pos) { return (bool)(N & (1 << pos)); }
int main() {
  int n;
  while (~scanf("%d", &n)) {
    vector<int> div;
    int sqrtn = sqrt(n);
    for (int i = 2; i <= sqrtn; i++) {
      if (n % i == 0) {
        div.push_back(i);
        if (n / i != i) div.push_back(n / i);
      }
    }
    int len = div.size();
    int arr[n];
    int res = 0;
    for (int i = 0; i < n; i++) {
      scanf("%d", &arr[i]);
      res += arr[i];
    }
    int koita = n / 3;
    for (int i = 0; i < len; i++) {
      for (int j = 0; j < div[i]; j++) {
        int sum = 0, cnt = 0;
        for (int k = j; k < n; k += div[i]) {
          cnt++;
          sum += arr[k];
        }
        if (cnt >= 3) res = max(res, sum);
      }
    }
    printf("%d\n", res);
  }
  return 0;
}
