#include<stdio.h>
#include<stdbool.h>
#define MAX 1000
#define VMAX 10000

int n,A[MAX],s;
int B[MAX],T[VMAX+1];


void sort(int A[]){
	int flag = 1;
	int tmp;
	while(flag == 1){
		flag = 0;
		for(int j = n-1; j >= 1; j--){
			if(A[j] < A[j-1]){
				tmp = A[j];
				A[j] = A[j-1];
				A[j-1] = tmp;
				flag = 1;
			}
		}
	}
}

int min(int a, int b){
	if(a < b)return a;
	else return b;
}

int solve(){
	int ans=0;

	
	bool V[MAX];
	for(int i = 0;i < n;i++){
	B[i] = A[i];
	V[i] = false;
	}

	sort(B);
	for(int i = 0; i< n; i++){
		T[B[i]] = i;
	}
	
	for(int i = 0; i < n; i++){
		if(V[i]){continue;}
		int cur = i;
		int S = 0;
		int m = VMAX;
		int an=0;
		while(1){
			V[cur] = true;
			an++;
			int v = A[cur];
			m = min(m, v);
			S += v;
			cur = T[v];
			if(V[cur]){
				break;
			}
		}
		ans += min(S + (an - 2) * m, m + S + (an + 1) * s);

}
	return ans;
}

int main(){
	scanf("%d", &n);
	s = VMAX;
	for(int i = 0; i < n; i++){
		scanf("%d", &A[i]);
		s = min(s, A[i]);
	}
	int ans = solve();
	printf("%d\n", ans);
	
	return 0;
}
