만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

최대공약수로 잇기

시간 제한4초메모리 제한1024 MB

요약
n개의 수가 주어질 때, 모든 학생이 연결되도록 간선을 고르고 간선마다 gcd를 더한 합의 최댓값을 구합니다.
난이도

보통10점 중 7점

유형
유니온 파인드, 수학, 그리디
정답자
아직 제출이 없습니다

문제

어느 대학교 학과에 학생 nn명이 입학했습니다. 학생들은 서로 잘 모르기 때문에 앞으로 있을 시험과 평가 소식을 빠르고 확실하게 주고받을 방법이 필요합니다. 그래서 학생들은 새로운 바이트랜드 메신저에서 여러 개의 대화를 만듭니다. 각 대화에는 정확히 두 명의 학생이 참여합니다. 정보는 다음과 같이 퍼집니다. 한 학생이 곧 있을 시험 소식을 알게 되면, 그 학생은 같은 조 동기들과 나눈 모든 대화에 이 메시지를 보냅니다. 그다음 처음으로 메시지를 받은 사람들이 자신이 참여한 모든 대화에 메시지를 보내고, 이런 식으로 계속 이어집니다.

반장은 모든 학생이 메시지를 최소 한 번 받도록 대화 네트워크를 구성하려 합니다. 대화의 수는 가능한 한 적어야 합니다. 각 학생 ii에게는 정수 aia_i가 주어집니다. 학생 uu와 vv 사이에 만든 대화의 점수는 gcd⁡(au,av)\gcd(a_u, a_v)입니다. 반장은 모든 대화 점수의 합이 최대가 되기를 원합니다. 가능한 최대 점수 합을 구하세요.

입력

첫째 줄에 학생 수 nn (1≤n≤100 0001 \le n \le 100\,000)이 주어집니다. 둘째 줄에는 양의 정수 aia_i (1≤ai≤1 000 0001 \le a_i \le 1\,000\,000) nn개가 주어집니다.

출력

대화의 수가 최소인 네트워크 중에서 반장이 만들 수 있는 점수 합의 최댓값을 한 줄에 출력합니다.

힌트

첫 번째 예제에서 최적해는 학생 쌍 (1, 2), (2, 3), (2, 4), (4, 5) 사이에 대화를 만드는 것입니다. 이 네트워크의 점수 합은 1+1+2+1=51 + 1 + 2 + 1 = 5입니다.

예제2

  1. 예제 1

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

    입력
    2
    5 10
    
    예상 출력
    5