output_description: Print the score obtained by the optimal choice of A and B.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N
      s_0 s_1 ...... s_{N-1}
attempt: # -*- coding: utf-8 -*-
  import sys
  
  sys.setrecursionlimit(10**9)
  INF = 10**18
  MOD = 10**9 + 7
  input = lambda: sys.stdin.readline().rstrip()
  YesNo = lambda b: bool([print("Yes")] if b else print("No"))
  YESNO = lambda b: bool([print("YES")] if b else print("NO"))
  int1 = lambda x: int(x) - 1
  
  
  def main():
      N = int(input())
      s = tuple(map(int, input().split()))
  
      cost = [-INF] * (N + 1)
  
      for i in range(1, int((N - 1) ** 0.5) + 1):
          if (N - 1) % i == 0:
              cost[i] *= 2
              cost[(N - 1) // i] *= 2
  
      is_prime = [True] * (N + 1)
      is_prime[0] = False
      is_prime[1] = False
      for i in range(2, int(N**0.5) + 1):
          if not is_prime[i]:
              continue
          for j in range(i * 2, N + 1, i):
              is_prime[j] = False
      primes = [i for i in range(N + 1) if is_prime[i]]
  
      def get_divprime(n):
          divprime = []
          for x in primes:
              if n % x == 0:
                  divprime.append(x)
                  while n % x == 0:
                      n //= x
              if n == 1:
                  break
          return divprime
  
      ans = 0
      for x in range(N - 2, 1, -1):
          if cost[x] == -INF * 2:
              continue
          if x > N // 2:
              tmp = 0
              for i in range(x, N - 1, x):
                  tmp += s[i] + s[N - 1 - i]
              cost[x] = tmp
              ans = max(ans, tmp)
              if (N - 1) % x == 1:
                  continue
          elif cost[x] == -INF:
              if (N - 1) % x > 1:
                  tmp = 0
                  for i in range(x, N - 1, x):
                      tmp += s[i] + s[N - 1 - i]
                  cost[x] = tmp
                  ans = max(ans, tmp)
              else:
                  tmp = 0
                  for i in range(x, N - 2, x):
                      tmp += s[i] + s[N - 1 - i]
                  cost[x] = tmp
                  ans = max(ans, tmp)
          else:
              tmp = cost[x]
          divprime = get_divprime(x)
          for y in divprime:
              if x == y or cost[x // y] == -INF * 2:
                  continue
              tmptmp = tmp
              if (N - 1) % y > 1:
                  for i in range(x // y, N - 1, x // y):
                      if i % x != 0:
                          tmptmp += s[i] + s[N - 1 - i]
              else:
                  for i in range(x // y, N - 2, x // y):
                      if i % x != 0:
                          tmptmp += s[i] + s[N - 1 - i]
              cost[x // y] = tmptmp
              ans = max(ans, tmptmp)
      print(ans)
  
  
  if __name__ == "__main__":
      main()
  
problem_description: Statement
  
  There is an infinitely large pond, which we consider as a number line. In this
  pond, there are N lotuses floating at coordinates 0, 1, 2, ..., N-2 and N-1.
  On the lotus at coordinate i, an integer s_i is written.
  
  You are standing on the lotus at coordinate 0. You will play a game that
  proceeds as follows:
  
    * 1. Choose positive integers A and B. Your score is initially 0.
    * 2. Let x be your current coordinate, and y = x+A. The lotus at coordinate x disappears, and you move to coordinate y.
      * If y = N-1, the game ends.
      * If y \neq N-1 and there is a lotus floating at coordinate y, your score increases by s_y.
      * If y \neq N-1 and there is no lotus floating at coordinate y, you drown. Your score decreases by 10^{100} points, and the game ends.
    * 3. Let x be your current coordinate, and y = x-B. The lotus at coordinate x disappears, and you move to coordinate y.
      * If y = N-1, the game ends.
      * If y \neq N-1 and there is a lotus floating at coordinate y, your score increases by s_y.
      * If y \neq N-1 and there is no lotus floating at coordinate y, you drown. Your score decreases by 10^{100} points, and the game ends.
    * 4. Go back to step 2.
  
  You want to end the game with as high a score as possible. What is the score
  obtained by the optimal choice of A and B?
samples: [{"input": "5\n    0 2 5 1 0", "output": "3\n    \n\nIf you choose A = 3 and B = 2, the game proceeds as follows:\n\n  * Move to coordinate 0 + 3 = 3. Your score increases by s_3 = 1.\n  * Move to coordinate 3 - 2 = 1. Your score increases by s_1 = 2.\n  * Move to coordinate 1 + 3 = 4. The game ends with a score of 3.\n\nThere is no way to end the game with a score of 4 or higher, so the answer is\n3. Note that you cannot land the lotus at coordinate 2 without drowning later.\n\n* * *"}, {"input": "6\n    0 10 -7 -4 -13 0", "output": "0\n    \n\nThe optimal strategy here is to land the final lotus immediately by choosing A\n= 5 (the value of B does not matter).\n\n* * *"}, {"input": "11\n    0 -4 0 -99 31 14 -15 -39 43 18 0", "output": "59"}]