#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int cow[10010],acow[10010];//目标狀态存在acow中
int hash[100010];//存儲每隻牛的下标
bool vis[10010];//找過的牛置為1
int main()
{
int n,i,sum,qmin,bmin;
while(scanf("%d",&n)!=EOF)
{
qmin=1<<25;
memset(vis,false,sizeof(vis));
sum=0;
for(i=0;i<n;i++)
{
scanf("%d",&cow[i]);
acow[i]=cow[i];
hash[cow[i]]=i;
sum=sum+cow[i];
if(cow[i]<qmin) qmin=cow[i];
}
sort(acow,acow+n);
int lehn=n,ans=0,leh;
while(lehn)
{
i=leh=0;
bmin=1<<25;
while(vis[i]) i++;//找到輪換的起點
int begin=i;//記錄起點,便于判斷是不是已經循環完了
while(1)
{
leh++;
vis[i]=1;
if(cow[i]<bmin) bmin=cow[i];
i=hash[acow[i]];
if(i==begin) break;
}
lehn-=leh;//長度減去輪換的長度,等于剩下的所有長度
// if(leh==1) continue;//隻有一個元素的循環不需要變動
int V1=(leh-2)*bmin;
int V2=(leh+1)*qmin+bmin;
ans+=V1<V2?V1:V2;
}
printf("%d\n",ans+sum);
}
return 0;
}