// 2.置换,置换的运算
// 置换的概念还是比较好理解的,《组合数学》里面有讲。对于置换的幂运算大家可以参考一下潘震皓的那篇《置换群快速幂运算研究与探讨》,写的很好。
//然后我就试了,结果老是错,数组超届啊
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
#define inta __int64
int a[2000005],b[2000005],vis[2000005],n;
int find(int k){
for(int i=1;i<=n;i++){
if(a[i]==k) return i;
}
return 1;
}
int main(){
inta sum=0;
int i,small,min;
scanf("%d",&n);
memset(vis,0,sizeof(vis));
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
b[i]=a[i];
if(i==1) small=a[i];
if(a[i]<small) {small=a[i];a[0]=b[0]=small;}
}
sort(b+1,b+n+1);
int beg=0,len=0;
int a1,a2,j,cont=0;
inta ss=0;
i=1;
while(len<n){
if(vis[a[i]]==0&&beg==0){
cont=1;
beg=a[i];
len++;
sum+=a[i];
min=a[i];
vis[a[i]]=1;
// printf("%d ",a[i]);
}
if(b[i]!=a[i]){
i=find(b[i]);
cont++;
len++;
if(min>a[i]) min=a[i];
sum+=a[i];
vis[a[i]]=1;
// printf("%d ",a[i]);
}
if(b[i]==beg){
// printf("\n");
a1=sum-min+(cont-1)*min;
a2=sum+min+(cont+1)*small;
if(a1>a2) ss+=a2;
else ss+=a1;
if(len<n){
beg=0;sum=0;min=0;cont=0;
for(j=1;j<=n;j++)
if(vis[a[j]]==0){
i=j;
break;
}
}
}
}
printf("%I64d\n",ss);
return 0;
}