import
java.util.*;
class
GFG
{
static
int
MAX =
100
;
static
int
recur(
int
ind,
int
cnt,
int
last,
int
a[],
int
n,
int
k,
int
dp[][])
{
if
(cnt == k)
return
0
;
if
(ind == n)
return
(
int
) -1e9;
if
(dp[ind][cnt] != -
1
)
return
dp[ind][cnt];
int
ans =
0
;
for
(
int
i = ind; i < n; i++)
{
if
(cnt %
2
==
0
)
ans = Math.max(ans,recur(i +
1
, cnt +
1
, i, a, n, k, dp));
else
ans = Math.max(ans, __gcd(a[last], a[i]) +
recur(i +
1
, cnt +
1
,
0
, a, n, k, dp));
}
return
dp[ind][cnt] = ans;
}
static
int
__gcd(
int
a,
int
b)
{
if
(b ==
0
)
return
a;
return
__gcd(b, a % b);
}
public
static
void
main(String[] args)
{
int
a[] = {
4
,
5
,
3
,
7
,
8
,
10
,
9
,
8
};
int
n = a.length;
int
k =
4
;
int
[][]dp =
new
int
[n][MAX];
for
(
int
i =
0
; i < n; i++)
{
for
(
int
j =
0
; j < MAX; j++)
{
dp[i][j] = -
1
;
}
}
System.out.println(recur(
0
,
0
,
0
, a, n, k, dp));
}
}