#include <bits/stdc++.h>
using namespace std;
class Complex {
 private:
  int real;
  int image;

 public:
  Complex(int r = 0, int i = 0) {
    real = r;
    image = i;
  }
  Complex operator+(Complex const &obj) {
    Complex res;
    res.real = real + obj.real;
    res.image = image + obj.image;
    return res;
  }
  void print() { cout << real << "+i" << image << "\n"; }
};
void merge_sort(int *a, int l, int mid, int r) {
  int n1 = mid - l + 1;
  int n2 = r - mid;
  int le[n1];
  int re[n2];
  for (int i = 0; i < n1; i++) {
    le[i] = a[l + i];
  }
  for (int jj = 0; jj < n2; jj++) {
    re[jj] = a[mid + 1 + jj];
  }
  int i = 0;
  int j = 0;
  int k = l;
  while (i < n1 && j < n2) {
    if (le[i] <= re[j]) {
      a[k] = le[i];
      i++;
    } else {
      a[k] = re[j];
      j++;
    }
    k++;
  }
  while (i < n1) {
    a[k++] = le[i++];
  }
  while (j < n2) {
    a[k++] = re[j++];
  }
}
void merge(int *a, int l, int r) {
  if (l >= r) {
    return;
  }
  int mid = l + (r - l) / 2;
  merge(a, l, mid);
  merge(a, mid + 1, r);
  merge_sort(a, l, mid, r);
}
void bubble_sort(int *a, int n) {
  for (int i = 0; i < n - 1; i++) {
    for (int j = 0; j < n - i - 1; j++) {
      if (a[j] > a[j + 1]) {
        swap(a[j], a[j + 1]);
      }
    }
  }
}
void insertion_sort(int *a, int n) {
  for (int i = 1; i < n; i++) {
    int curr = a[i];
    int j = i - 1;
    while (a[j] > curr && j >= 0) {
      a[j + 1] = a[j];
      j--;
    }
    a[j + 1] = curr;
  }
}
void selection_sort(int *a, int n) {
  for (int i = 0; i < n - 1; i++) {
    int ind = i;
    for (int j = i + 1; j < n; j++) {
      if (a[j] < a[ind]) {
        ind = j;
      }
    }
    swap(a[ind], a[i]);
  }
}
long long int a[100005] = {0};
long long int dp[100005];
void solve() {
  long long int a[3];
  long long int sum = 0;
  for (int i = 0; i < 3; i++) {
    cin >> a[i];
    sum += a[i];
  }
  sort(a, a + 3);
  cout << min(sum / 3, a[0] + a[1]) << "\n";
}
int main() {
  int t = 1;
  while (t--) {
    solve();
  }
}
