Project Euler #3 Efficiency
Correctness:

Project Euler Problem #3 asks for 
the largest prime factor of 600851475143, and that number exceed the range
of the int data type. (Your program aborts with an exception for this input value.) You have to use long instead. 

In 

for (int i = 3; i &lt; Math.sqrt(input); i = i + 2) { ... }


the &lt; should be replaced by &lt;=, otherwise you get a wrong result if the
input is the square of a prime number (such as 25). To avoid a loss of precision if input is converted to a floating point
number, it should be

for (long i = 3; i * i &lt;= input; i = i + 2) { ... }


Efficiency:

The problem is about the largest prime factor. Your algorithm already 
determines the prime factors in increasing order. Therefore there is no need
to store the prime factors in a collection to get its maximum value.
It is sufficient to remember the last prime factor found.

Putting it together:

Your function (renamed slightly) would then look like

public static long calculateLargestFactor(long input) {
    long largestFactor = 1;
    while (input % 2 == 0) {
        largestFactor = 2;
        input = input / 2;
    }
    for (long i = 3; i * i &lt;= input; i = i + 2) {
        while (input % i == 0) {
            largestFactor = i;
            input = input / i;
        }
    }
    if (input &gt; 2) {
        largestFactor = input;
    }
    return largestFactor;
}