IComparable is implemented by types that you wish to give them the ability to compare themselves to other instances of the same type, when sorting for example.
IComparer is implemented by a type that you wish to use as a sorting predicate when sorting a collection. This allows you to create several classes that will compare the same two instances in different ways thus creating a different sort order.
Array.Sort will use each element's IComparable implementation to sort the values or it can receive an IComparer to choose the order.
For more information read How to use the IComparable and IComparer interfaces in Visual C#
IEnumerable is an interface that represents the ability to iterate through the collection using an iterator. For example, anything that implements IEnumerable can be iterated through using a for-each loop. Both the Array and List<T> classes implement the interface, and so can be used in a for-each loop.
It isn't a collection in itself, it just represents a behaviour that actual collections may (and usually do) have.
The generic equivalent of IEnumerable (IEnumerable<T>) also serves as the source of many LINQ extension methods also, as LINQ extensions usually require the ability to enumerate over collections, and anything that implements IEnumerable<T> will have that behaviour.